摘要:值得一瞥的相關(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)建的。
BuckleScriptBuckleScript是基于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
ReasonMLReasonML與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"}; ` |
另一個強(qiáng)類型、高性能的能夠編譯到JavaScript的編程語言,其定位與Elm類似,主要特性為:
沒有運行時錯誤
嚴(yán)格的,類似于JavaScript的計算
支持JavaScript 對象語法
提供相較于Hashkell更強(qiáng)大方便的類型系統(tǒng)
更方便地JavaScript庫集成
Webpack-blocksDan 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仍然處于不斷的迭代更新中,可能很多開發(fā)者忽略了2016年6月份發(fā)布的jQuery 3.0版本,可以參考這里獲取更多信息。
Pixi.js如果你打算在瀏覽器中實現(xiàn)精彩的2D效果,特別是對于使用WebGL的游戲開發(fā)者,Pixi.js是個值得一看的庫,可以參考這里獲取更多的Demo。
Preact與[inferno]()非常優(yōu)秀的React的替代庫。
RustRust可以編譯到JavaScript啦(通過emscripten)。
Custom ElementsCustom 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.jsNext.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
摘要:我們的目標(biāo)是找出最有職業(yè)投資回報率的主題和技術(shù)。比特幣在幾年內(nèi)增長了若干個量級。比特幣倍拐點在這個圖表中,每個箭頭始于倍點,指向價格修正后的最低點。 showImg(https://segmentfault.com/img/remote/1460000017919159); 圖:Jon Glittenberg Happy New Year 2019 (CC BY 2.0) 又到了一年的...
摘要:年前端有哪些領(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ù)測判斷,希望能對大家...
摘要:年前端有哪些領(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ù)測判斷,希望能對大家...
摘要:預(yù)處理器超過的開發(fā)者使用,這也使得成為無可爭議的預(yù)處理首選者。的開發(fā)者使用,通常情況下,都是和等預(yù)處理器配合使用的。開發(fā)人員應(yīng)該多研究一些預(yù)處理器和命名方式等,以便選擇最適合自己的。 本文來源于全球的5254份前端工具使用的調(diào)查報告,期望通過本文能夠幫助大家更好的了解最新的前端開發(fā)工具趨勢。 受訪者組成 83%的受訪者具有兩年以上的前端技術(shù)經(jīng)驗,只有5%的受訪者不到一年: showIm...
摘要:年的報告,總共有來自個不同的國家共多名開發(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ā)布了剛剛過...
閱讀 3084·2021-11-25 09:43
閱讀 2258·2021-09-07 10:28
閱讀 3571·2021-08-11 11:14
閱讀 2781·2019-08-30 13:49
閱讀 3548·2019-08-29 18:41
閱讀 1167·2019-08-29 11:26
閱讀 1979·2019-08-26 13:23
閱讀 3378·2019-08-26 10:43