国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

2017值得一瞥的JavaScript相關(guān)技術(shù)趨勢

davidac / 2768人閱讀

摘要:值得一瞥的相關(guān)技術(shù)趨勢從屬于筆者的前端入門與工程實踐,推薦閱讀我的前端之路工具化與工程化獲得更多關(guān)于年前端總結(jié)。的不少開發(fā)者都是的粉絲,他們的以及都是基于構(gòu)建的。

2017值得一瞥的JavaScript相關(guān)技術(shù)趨勢從屬于筆者的Web 前端入門與工程實踐,推薦閱讀2016-我的前端之路:工具化與工程化獲得更多關(guān)于2016年前端總結(jié)。本文主要內(nèi)容翻譯自,筆者對于每個條目進(jìn)行了些許完善。本文中提及的這些趨勢可能離大部分開發(fā)者還很遠(yuǎn),或者說離真正的大規(guī)模工程化應(yīng)用還很遠(yuǎn),不過不妨礙我們提前兩三年了解下。本文僅代表原作者個人看法,不喜留言輕噴,譯者也很好奇大家對這個列表的看法。

跨年前兩天,Dan Abramov在Twitter上提了一個問題:

JS社區(qū)毫不猶豫的拋出了它們對于新技術(shù)的預(yù)期與期待,本文內(nèi)容也是總結(jié)自Twitter的回復(fù),按照流行度降序排列。有一個尚未確定的小點是既然函數(shù)式編程已不再是少數(shù)派,是否要把它踢出紅毯呢?

WebAssembly

去年筆者就表示過了對于WebAssembly的期待,WebAssembly就是面向Web平臺的底層代碼。其初衷是希望能夠使所有語言都能夠編譯運行到Web平臺,這一點對于很多函數(shù)式編程、響應(yīng)式編程的粉絲充滿吸引力。特別是隨著這幾年JavaScript社區(qū)的突飛猛進(jìn),很多開發(fā)者并不能跟得上這門語言衍化的速度,因此他們也非常希望能夠直接用自己習(xí)慣的語言而不是要去重頭學(xué)一門從入門到直接放棄的語言。不過JavaScript目前還處于明顯的上升勢頭,暫時還沒人唱衰它。并且WebAssembly仍處于襁褓中,才進(jìn)入到預(yù)覽階段,離真正的發(fā)布還有很長的距離。總結(jié)而言,筆者建議我們都應(yīng)該對WebAssembly保持一定的關(guān)注,畢竟它會對未來的JavaScript造成極大的影響。如果你對于WebAssembly有興趣,那么推薦閱讀Eric Elliott的相關(guān)博客。

Elm

筆者個人不太意愿使用Elm,不過其特性還是很有借鑒價值

2016年不少的開發(fā)者參與到Elm的開發(fā)中,Elm不僅僅是JavaScript的擴(kuò)展庫,而是一門可以編譯到JavaScript的編程語言,對于很多熱衷于函數(shù)式編程的開發(fā)者是個不錯的選擇。參考Elm 入門介紹,Elm提供了如下特性:

并不會存在運行時錯誤,沒有null,沒有undefined is not a funtion

非常友好的錯誤提示信息能夠輔助你開發(fā)。

比較嚴(yán)格的代碼規(guī)范與項目架構(gòu),保證了你的應(yīng)用在快速迭代中依然保持著最佳實踐。

自動為所有的Elm包添加語義版本描述。

總而言之,Elm為我們提供了優(yōu)秀的工具來保證編寫干凈、簡單與碎片化的代碼,并且因為Elm是可以編譯到JavaScript,因此很多JavaScript開發(fā)者都可以保持下關(guān)注或者嘗試下。

babili(babel-minify)

Babili最早于2016年8月份發(fā)布,它是基于Babel工具鏈上的支持原生ES6語法的壓縮工具。Henry Zhu在這篇文章中稱述了為什么我們需要另一個壓縮工具,關(guān)鍵點如下:
目前大部分壓縮工具只能夠處理ES5代碼,因此在壓縮之前需要先進(jìn)性編譯,而Babili能夠支持直接輸入ES2015+。隨著瀏覽器性能的提升,越來越多的瀏覽器支持直接運行ES2015的代碼,因此我們不需要再進(jìn)行轉(zhuǎn)換編譯。另外Babili也可以作為Babel preset引入到現(xiàn)有的Babel配置中,也可以作為直接使用的命令行工具。

這里舉個簡單的例子,我們編寫了如下的ES6類:

class Mangler {
  constructor(program) {
    this.program = program;
  }
}
// need this since otherwise Mangler isn"t used
new Mangler(); 

之前,利用傳統(tǒng)的Babel進(jìn)行編譯與壓縮,會得到如下代碼:

// ES2015 code -> Babel -> Uglify/Babili -> Minified ES5 Code
var a=function a(b){_classCallCheck(this,a),this.program=b};a();

而Babili的效果如下:

// ES2015 code -> Babili -> Minified ES2015 Code
class a{constructor(b){this.program=b}}new a;
OCaml

OCaml本身和JS沒啥關(guān)系,不過列表接下來的兩項都是基于OCaml,因此還是要先介紹下。如果你關(guān)注了近兩年來的函數(shù)式編程崛起之路,你或許聽過Haskell。而得益于OCaml能夠編譯到就S,其以后來居上的姿態(tài)凌駕于Haskell。Facebook的不少開發(fā)者都是OCaml的粉絲,他們的Hack、Flow以及Infer都是基于OCaml構(gòu)建的。

BuckleScript

BuckleScript是基于OCaml實現(xiàn)的服務(wù)端框架,由著名的Bloomberg團(tuán)隊創(chuàng)造而來。Duane Johnson對他們的解釋如下:
BuckleScript或者bsc,是個基于OCaml編譯器的相對較新的JavaScript服務(wù)端框架。換言之,你可以使用優(yōu)秀的函數(shù)式、自帶類型的OCaml語言,同時也能繼續(xù)背靠基于npm包管理器的Web生態(tài)系統(tǒng)。

我們來簡要的看下BuckleScript代碼風(fēng)格,譬如用BuckleScript實現(xiàn)簡單的服務(wù)端:

let port = 3000
let hostname = "127.0.0.1"
let create_server http =
  let server = http##createServer begin fun [@bs] req resp ->
      resp##statusCode #= 200;
      resp##setHeader "Content-Type" "text/plain";
      resp##_end "Hello world
"
    end
  in
  server##listen port hostname begin fun [@bs] () ->
    Js.log ("Server running at http://"^ hostname ^ ":" ^ Pervasives.string_of_int port ^ "/")
  end

let () = create_server Http_types.http

編譯輸出為:

"use strict";
var Pervasives = require("bs-platform/lib/js/pervasives");
var Http       = require("http");

var hostname = "127.0.0.1";

function create_server(http) {
  var server = http.createServer(function (_, resp) {
    resp.statusCode = 200;
    resp.setHeader("Content-Type", "text/plain");
    return resp.end("Hello world
");
  });
  return server.listen(3000, hostname, function () {
    console.log("Server running at http://" + (hostname + (":" + (Pervasives.string_of_int(3000) + "/"))));
    return /* () */0;
  });
}

create_server(Http);

OCaml最大的特性就是其函數(shù)式語言特性,我們再看下其對于不可變類型的支持,我們使用OCaml stdlib實現(xiàn)的不可變類型如下:

module IntMap = Map.Make(struct
  type t = int
  let compare (x : int) y = compare x y
end)

let test () =
  let m = ref IntMap.empty in
  let count = 1000000 in
  for i = 0 to count do
    m := IntMap.add i i !m
  done;
  for i = 0 to count do
    ignore (IntMap.find i !m)
  done

let () = test()

而如果要用Facebook Immutable實現(xiàn)的代碼為:

"use strict";

var Immutable = require("immutable");
var Map = Immutable.Map;
var m = new Map();

function test() {
  var count = 1000000;
  for(var i = 0; i < count; ++i) {
    m = m.set(i, i);
  }
  for(var j = 0; j < count; ++j) {
    m.get(j);
  }
}

test();

性能評測下,二者的執(zhí)行時間對比為:

BuckleScript: 1186ms

JavaScript: 3415ms

編譯后的體積為:

BuckleScript (production): 899 Bytes

JavaScript: 55.3K Bytes

ReasonML

ReasonML與React師出同門,是基于OCamel設(shè)計的語法友好、編輯器支持程度高,并且有強(qiáng)大的編譯工具支持的語言。建議閱讀Sean Grove對ReasonML的介紹。本文簡單介紹幾個JavaScript與Reason的語法對比:

元類型
| JavaScript | Reason |

3 3
3.1415 3.1415
"Hello world!" "Hello world!"
"Hello world!" Strings must use “
Characters are strings "a"
true true
[1,2,3] [1,2,3]
null ()
const x = y; let x = y;
let x = y; reference cells
var x = y; No equivalent (thankfully)
[x, ...lst] (linear time) [x, ...lst] (constant time)
[...lst, x] (linear time) Not supported
{...obj, x: y} {...obj, x: y}

表達(dá)式
| JavaScript | Reason |

login ? "hi" : "bye" login ? "hi" : "bye"
let res = undefined;switch (thing) { case first: res = "first"; break; case second: res = "second"; break;}; `let res = switch thing { first => "first" second => "second"}; `
Purescript

另一個強(qiáng)類型、高性能的能夠編譯到JavaScript的編程語言,其定位與Elm類似,主要特性為:

沒有運行時錯誤

嚴(yán)格的,類似于JavaScript的計算

支持JavaScript 對象語法

提供相較于Hashkell更強(qiáng)大方便的類型系統(tǒng)

更方便地JavaScript庫集成

Webpack-blocks

Dan Abramov說過,Webpack的定位就是在相對底層,因此將配置以編程塊的方式實現(xiàn)會更加完備。

const { createConfig, defineConstants, env, entryPoint, setOutput, sourceMaps } = require("@webpack-blocks/webpack2")
const babel = require("@webpack-blocks/babel6")
const devServer = require("@webpack-blocks/dev-server2")
const postcss = require("@webpack-blocks/postcss")
const autoprefixer = require("autoprefixer")

module.exports = createConfig([
  entryPoint("./src/main.js"),
  setOutput("./build/bundle.js"),
  babel(),
  postcss([
    autoprefixer({ browsers: ["last 2 versions"] })
  ]),
  defineConstants({
    "process.env.NODE_ENV": process.env.NODE_ENV
  }),
  env("development", [
    devServer(),
    devServer.proxy({
      "/api": { target: "http://localhost:3000" }
    }),
    sourceMaps()
  ])
])
GraphQL

GraphQL是個不錯的REST替代查詢語言,特別是對于那些擁有大量數(shù)據(jù)的公司。這個案例分析很好地闡述了從REST到GraphQL的轉(zhuǎn)變之路。我能夠想象2017年GraphQL會繼續(xù)處于上升勢頭,不過要談到真的大規(guī)模實施,還要到2018年吧。

React Storybook

相信大家對于React Storybook并不陌生了,你能夠獨立于應(yīng)用而交互式的開發(fā)你的組件,就如下圖所示:

[jQuery 3.0]()

爺爺輩的jQuery仍然處于不斷的迭代更新中,可能很多開發(fā)者忽略了2016年6月份發(fā)布的jQuery 3.0版本,可以參考這里獲取更多信息。

Pixi.js

如果你打算在瀏覽器中實現(xiàn)精彩的2D效果,特別是對于使用WebGL的游戲開發(fā)者,Pixi.js是個值得一看的庫,可以參考這里獲取更多的Demo。

Preact與[inferno]()

非常優(yōu)秀的React的替代庫。

Rust

Rust可以編譯到JavaScript啦(通過emscripten)。

Custom Elements

Custom Elements(包括Shadow DOM)一直不被主流的開發(fā)者接受,不過看似2017這一點將會發(fā)生些許變化。變化的關(guān)鍵因素在于瀏覽器支持比例的改善。個人還是蠻期待Custom Elements的,可以關(guān)注SmashingMag或者Google’s關(guān)于Custom Elements的解釋。

WebRTC

很難相信WebRTC已經(jīng)五歲了,F(xiàn)acebook、Slack、Snapchat以及WhatsApp都在他們的服務(wù)中集成了WebRTC。可以預(yù)見WebRTC會在2017年被更多的公司采用,蒸蒸日上。

Next.js

Next.js是個基于React、Webpack與Babel構(gòu)建的,支持服務(wù)端渲染的小框架,其來源于ZEIT團(tuán)隊,在React社區(qū)獲得了不小的關(guān)注度。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/86731.html

相關(guān)文章

  • 2019 年值得學(xué)習(xí)頂級 JavaScript 框架與主題

    摘要:我們的目標(biāo)是找出最有職業(yè)投資回報率的主題和技術(shù)。比特幣在幾年內(nèi)增長了若干個量級。比特幣倍拐點在這個圖表中,每個箭頭始于倍點,指向價格修正后的最低點。 showImg(https://segmentfault.com/img/remote/1460000017919159); 圖:Jon Glittenberg Happy New Year 2019 (CC BY 2.0) 又到了一年的...

    legendaryedu 評論0 收藏0
  • 2018前端值得關(guān)注技術(shù)

    摘要:年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會興起,哪些技術(shù)會沒落。自從谷歌提出后,就持續(xù)的獲得了業(yè)界的關(guān)注,熱度可見一斑。就在今年,谷歌也宣布將獲得與安卓原生應(yīng)用同等的待遇與權(quán)限。但是無論都值得關(guān)注。 1.前言 2017悄然過去,2018已經(jīng)來到。人在進(jìn)步,技術(shù)在發(fā)展。2018年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會興起,哪些技術(shù)會沒落。下面就我個人的判斷進(jìn)行一個預(yù)測判斷,希望能對大家...

    xiao7cn 評論0 收藏0
  • 2018前端值得關(guān)注技術(shù)

    摘要:年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會興起,哪些技術(shù)會沒落。自從谷歌提出后,就持續(xù)的獲得了業(yè)界的關(guān)注,熱度可見一斑。就在今年,谷歌也宣布將獲得與安卓原生應(yīng)用同等的待遇與權(quán)限。但是無論都值得關(guān)注。 1.前言 2017悄然過去,2018已經(jīng)來到。人在進(jìn)步,技術(shù)在發(fā)展。2018年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會興起,哪些技術(shù)會沒落。下面就我個人的判斷進(jìn)行一個預(yù)測判斷,希望能對大家...

    用戶84 評論0 收藏0
  • 2017年前端開發(fā)工具趨勢

    摘要:預(yù)處理器超過的開發(fā)者使用,這也使得成為無可爭議的預(yù)處理首選者。的開發(fā)者使用,通常情況下,都是和等預(yù)處理器配合使用的。開發(fā)人員應(yīng)該多研究一些預(yù)處理器和命名方式等,以便選擇最適合自己的。 本文來源于全球的5254份前端工具使用的調(diào)查報告,期望通過本文能夠幫助大家更好的了解最新的前端開發(fā)工具趨勢。 受訪者組成 83%的受訪者具有兩年以上的前端技術(shù)經(jīng)驗,只有5%的受訪者不到一年: showIm...

    plokmju88 評論0 收藏0
  • StateOfJS: 2018年JavaScript生態(tài)圈趨勢報告

    摘要:年的報告,總共有來自個不同的國家共多名開發(fā)者參與調(diào)查中國占總數(shù)的,共個開發(fā)者。今年的報告和前兩年不同,取消了部分。此比率較高的國家地區(qū)顯示為紅色,較低的國家地區(qū)顯示為藍(lán)色調(diào)查受訪者總數(shù)少于的國家地區(qū)將被省略。 前言 作為前端開發(fā)者,及時了解行業(yè)動態(tài)對我們的工作、學(xué)習(xí)方向起到至關(guān)重要的作用,畢竟知識太多,選擇對的學(xué)習(xí)方向才能既省力又能緊跟技術(shù)發(fā)展潮流。近期,StateOfJS發(fā)布了剛剛過...

    lsxiao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<