英文原文:Skills JavaScript Developers Should Learn in 2016
譯者:xxholly32
譯文地址:http://t.cn/R5HIDVI
JavaScript - 由于它是web開發(fā)中最基本的語言卓箫,無論你怎么看待它撤师,我們都要去考慮它的"未來"。畢竟边酒,瀏覽器可能是PC和移動設備都在使用的最廣泛的軟件應用程序了惯悠。
開發(fā)人員都知道躬络,JavaScript世界看上去動蕩不安甚至有些混亂(e.g. the left-pad incident)蜡吧,但這也是說明了這門語言正在不斷的完善。它試著去完善一些老的問題(通常是相關擴展或者復雜的問題)以跟上現(xiàn)在的發(fā)展趨勢征绎。
隨著需求的變化蹲姐,特別是在這技術日新月異的時代。你也許不知道以下這些技術,但想要提高或者完善你的技能淤堵,無論是了解Javascript的發(fā)展走向寝衫,還是讓你更好的進入這個領域顷扩,它們都是你需要關注的(尤其是那些初學者)拐邪。
那么,到底2016年javascript開發(fā)方向是什么(或者2017年又會有什么新的動向)隘截?
node.js已經(jīng)眾所周知了扎阶,后面的內(nèi)容我們也不會提它,因為它太有名氣了.....
React & Redux
2015年是React獲得肯定的一年婶芭,越來越多的開發(fā)者在2014年尾聲開始抱怨Angularjs的一些問題东臀,也有新聞說道,Angular2 將會和 Angular1 不兼容犀农。
如今的現(xiàn)狀是惰赋,Angular1 仍然在Github上備受關注。同時它的增長也開始放緩呵哨,而React正快速的填補這個缺口赁濒。
圖中的數(shù)據(jù)基于互聯(lián)網(wǎng)。
也許更能說明問題的指標是:react
孟害、angular
和angular2
三者的包在NPM的下載量:
出自 NPM 走勢
但是拒炎,這些數(shù)據(jù)并不能真實的代表這些框架的使用情況。有一點要考慮的是自從Angular1被Angular2替代之后挨务,它并沒有任何升級击你。更不必說,React不是一個框架谎柄,不能夠和AngularJS一起用丁侄。所以說,這兩者其實是沒法放在一起對比的朝巫。
盡管如此鸿摇,大概在去年一年里,JavaScript社區(qū)對React的支持比Angularjs要多一些捍歪。
看圖表户辱,你可能會問:在8月后發(fā)生了什么?React在npm的下載數(shù)量突然以指數(shù)倍的方式暴漲糙臼,Github的關注數(shù)量快要接近AngularJS的數(shù)量庐镐。
同時,Redux出現(xiàn)变逃,由它的創(chuàng)作人Dan Abramov發(fā)布在 ReactEurope2015 7月的會議上必逆。Redux是一個類似flux的實現(xiàn),讓很多開發(fā)者確信這更適合并能夠推動React的發(fā)展。
在Redux出現(xiàn)前名眉,React已走過了一段坎坷粟矿,大家試圖找出如何最好地實現(xiàn)"Flux"的架構。許多更好的實現(xiàn)方式涌現(xiàn)出來损拢,但對于Javascript開發(fā)者來說還是缺少一個全面完整的解決方案陌粹。因此,盡管React在DOM表現(xiàn)層處理有多優(yōu)秀福压,開發(fā)者還是對采用這個技術到項目中保留自己的意見掏秩。
如今,隨著越來越多的開發(fā)者開始關注和使用Redux荆姆,并且認識到測試和debug JavaScript是如此方便蒙幻。Redux開始替代Flux成為了新的贏家。
由于2016年Javascript在前端領域的地位胆筒,同樣的邮破,React 和 Redux也變的炙手可熱了。知名公司如:Netflix仆救,Dropbox, 雅虎都已經(jīng)開始使用React抒和,并給與其很大的信心。
盡管這樣派桩,F(xiàn)acebook的Relay框架將在2017年成為Redux的最大挑戰(zhàn)者构诚。
你也許會閱讀這篇文章:Getting Started With React & Redux: An Intro
其他感興趣的框架
那么還有什么別的框架?還有一些相對關注低一些的铆惑,但被炒作的一些框架范嘱。
Angular2
谷歌和微軟合作開發(fā)的框架Angular2,或者說是用微軟的 TypeScript 開發(fā)的更易管理的Angularjs2员魏。這是什么意思呢丑蛤?大型公司(一些非技術性的公司)可能會關注Angularjs2,特別是使用了微軟的.NET框架的撕阎。從去年開始受裹,微軟也開始推動.NET的開源工作,使開發(fā)者能夠更好的使用虏束。
隨著Angular2的重寫棉饶,整個過程旨在能夠修改Angular1 app開發(fā)存留的一系列問題,目前為止效果明顯镇匀。Angular2 也會支持 web 組件開發(fā)照藻,使其有能力支持更好的展現(xiàn)。而谷歌也認為它是Web開發(fā)的未來汗侵。
然而幸缕,不管Angular團隊如何努力的帶領開發(fā)者從Angular 1 引導向Angular2群发, Angular社區(qū)對Angular的取舍還是分成兩大陣營。重寫導致Angular的停滯不前和React逐漸火熱发乔,而這個勢頭正在加劇熟妓。
Angular2 能否和 Angular1 當初一樣成功,并不能完全肯定栏尚,在Javascript社區(qū)也眾說紛紜起愈。Angular2 還是在Javascript和web開發(fā)的"未來"中有成功的可能性,但2016顯然不是Angular2抵栈,特別是它還是在beta版本告材。對于那先不喜歡復雜 react app 需要配置很多東東的開發(fā)者來說坤次,Angular2 還是可以選擇的古劲。
Meteor
Meteor在Github的關注和下載始終是穩(wěn)固上升中,和React缰猴,Angular 的發(fā)展相似产艾。這是一款輕量級、全棧式滑绒,并有鮮明特征的Javascript框架闷堡。很多開發(fā)者用它從框架中發(fā)現(xiàn)很多新穎有趣的地方。meteor被認為是一款原型式框架疑故,而且對初級開發(fā)者非常友善杠览,并且上手較快。
然而纵势,當使用Meteor時又是另一種情況踱阿。那些學過 Angular1 或者是一些Rails的開發(fā)者都掌握了大量隱藏的魔法技巧,而這也會是阻礙Meteor成為主流的一個原因钦铁。
Meteor 不像 React 和 AngularJS软舌, 企業(yè)中可能會有一些專業(yè)的開發(fā)人員,而 Meteor 沒有牛曹,這也是不被考慮的因素之一佛点。雖然 AngularJS 有很多問題,但有谷歌的技術團隊撐腰黎比。而使用 Meteor 不一樣超营, 無論是前后端開發(fā),都會存在很多的技術風險阅虫。Meteor要更廣泛的被廣大開發(fā)者使用演闭,還需要解決很多問題。
更別提那些數(shù)據(jù)庫問題书妻,由于 Mongodb 是 Meteor 的默認數(shù)據(jù)庫船响,而一些開發(fā)者對MongoDB的開發(fā)模式不是很感興趣(閱后即焚的小型數(shù)據(jù)庫)躬拢。
Meteor運行必須要依賴 SQL,而這點也沒有得到很好的支持见间。
不用說聊闯,Meteor 在2016甚至2017年能夠占到的份額都會比較少。對于構建大型負載的應用米诉,大部分專業(yè)開發(fā)者對這個技術菱蔬,還是持保留意見的。
ES6 終于要普及了
2016年史侣,如果你是個Javascript開發(fā)人員拴泌,而你的應用還沒有采用ES2015開發(fā)規(guī)范,你要好好問問自己惊橱,你到底在干什么蚪腐?
但為什么用 Babel 和 TypeScript 處理 ES6 app 項目呢?Babel大部分是轉(zhuǎn)換ES6的ES5税朴,TypeScript 是可選的靜態(tài)類型和簡單類型的Javascript的超集回季。
Facebook創(chuàng)造了Babel,Babel只支持靜態(tài)類型檢查的Javascript正林, 并做轉(zhuǎn)換泡一,所以這兩者都是以不同目的的方式被創(chuàng)造出來,沒有可比性觅廓。因此兩者一般不會同時使用鼻忠。
Babel是的第一個連接ES5和ES6項目的語言,而TypeScript在ES6的支持也快要趕超ES6了杈绸。在github上Babel關注度更高帖蔓,更不用說還有React開發(fā)者會使用Babel + Webpack的組合。
你也許會閱讀這篇文章:Setting Up a React Environment Using Npm, Babel, and Webpack
然而蝇棉,在最近讨阻,如果你看一些Javascript的解決方案,那些代碼庫都是用TypeScript做的篡殷,TypeScript也變得越來越火钝吮,挑選它的人也越來越多。Javascript曾給人的印象是比較難懂板辽,難調(diào)試的奇瘦。不僅因為它是一門動態(tài)語言,而且缺少類型檢查的機制劲弦。TypeScript卻很好的支持了一點耳标,而且TypeScript還有一個比Flow更大的社區(qū)支持。
除此之外邑跪,我們看下在谷歌趨勢上對TypeScript的關注走勢圖:
也許TypeScript在受關注程度上低于Angular2次坡,但隨著Javascript的應用越來越大呼猪,它很有可能因此而被關注。同時砸琅,Redux使得Javascript應用測試變得更加簡單宋距, 在TypeScript的幫助下,其代碼已更具可維護性(它也能和React的JSX兼容)症脂。除此之外谚赎,微軟、谷歌诱篷、Facebook共同致力在Javascript上添加靜態(tài)類型壶唤,最終生成ECMAScript協(xié)議。谷歌放棄了AtScript而用TypeScript在AngularJS上棕所,而Facebook的Flow的社區(qū)規(guī)模并沒有TypeScript那么大闸盔。
因此,很可靠地說橙凳,不僅靜態(tài)類型的Javascript是一種趨勢蕾殴,而且那些不喜歡Javascript的開發(fā)者也因為TypeScript開始接觸JavaScript了。TypeScript極有可能是未來的趨勢岛啸。
函數(shù)式編程要變成主流
確切的說,大量函數(shù)式編程已經(jīng)以他們的方式緩慢的占據(jù)主流的編程領域茴肥。但在現(xiàn)在復雜的web apps中坚踩,"函數(shù)式編程"又再次被關注了。
類似Scala的后端開發(fā)者瓤狐,正慢慢的擁抱函數(shù)式編程瞬铸。Fackbook的React前端開發(fā)者也提出了UI的函數(shù)式看法。隨著越來越多的贊揚础锐,函數(shù)式開發(fā)將會成為主流嗓节。
如今,前端開發(fā)主要是響應式編程和函數(shù)式編程皆警。React+Redux的開發(fā)模式拦宣,通常對于新手開發(fā)者來說,面向?qū)ο蟮木幊淌鞘褂米疃嗟慕鉀Q方案信姓。另一個角度來說鸵隧,React需要開發(fā)者用一個函數(shù)來處理UI,而Redux用一個函數(shù)處理數(shù)據(jù)意推。所以基本還是OOP的模式豆瘫。
不管怎樣,那些用函數(shù)式編程的開發(fā)者菊值,你仍然要堅持使用Javascript外驱,并且學一些RxJS的技巧育灸。RxJS是Javascript的響應式擴展,用于替代Flux框架昵宇,可能在小型項目中會有一些負作用描扯,但在一些大型web項目中卻能夠發(fā)揮很大作用。Netflix采用RxJS趟薄,因為Angular2支持并很好的使用RxJS绽诚。由于RxJS是微軟研發(fā)的,它也很好的集成了TypeScript杭煎,并且在不斷的完善中恩够。
但是,RxJS學起來比較難羡铲,不少開發(fā)者放棄了做FRP蜂桶,而在項目中用函數(shù)式開發(fā)。
值得注意的是另外的一些預測也切,比如ClojureScript和Elm扑媚, 但和React+Redux的函數(shù)式編程比起來還是有些遜色。(然而雷恃,Redux是受了Elm啟發(fā)的疆股,所以有些開發(fā)者還是想去關注一下Elm的)
考慮到Javascript龐大的生態(tài),很難說會大規(guī)模遷移到Elm的可能(當初有很多人堅信Scala會替代Java倒槐,然而最后并沒有)旬痹。RxJS, 另一方面讨越,仍然是學習門檻較高的框架两残,暫時無法變成主流。
隨著函數(shù)式編程很好的適應了如今web開發(fā)的熱潮把跨,有一點需要強調(diào)人弓,函數(shù)式編程已經(jīng)成為當下Javascript開發(fā)人員必不可少的技能之一了。
桌面應用的對決:Nw.js vs Electron
如今着逐,大量的軟件需要同步數(shù)據(jù)到不同的平臺(即崔赌,手機和桌面)。大部分都是起源于web app滨嘱,之后再創(chuàng)建桌面應用峰鄙, 而為了更好的用戶體驗,web app升級會更快太雨,并且更容易吟榴。更何況,用戶在什么都不裝的情況下囊扳,都可能會卸載你的產(chǎn)品吩翻。由于體驗不好兜看,所以這是個比較大的考驗。
在過去狭瞎,人們?yōu)榱四切﹚eb技術開發(fā)前端UI的桌面app產(chǎn)品细移,收到了CEF技術的驗證。這并不容易熊锭,而且這些應用還沒有真正的跨平臺兼容弧轧。自從2014年,Node.js的出現(xiàn)碗殷,桌面應用框架可以很好的使用web技術開發(fā)杈帐,并處理跨平臺的問題抹镊。但之后便沒有出現(xiàn)新的東東欲间。
如今沸呐,在該領域任有兩個主要的技術:Nw.js(node-webkit原身)和Electron。雖然兩者都是不錯的選擇仿粹,有自己的優(yōu)勢搁吓,這篇文章是關于發(fā)展趨勢。
因此吭历,讓我們來看看兩個項目在Github上的關注情況:
出自 Star History
雖然Nw.js出道較早堕仔,而且較為成熟,但Electron卻以指數(shù)形式增長毒涧,而nw.js的增長看上去是平穩(wěn)的線性的贮预。
等等!由于Electron是在GitHub誕生的契讲,考慮到GitHub上關注的公正性,我們?nèi)タ聪翯oogle趨勢滑频,但好像或多或少反映了同樣的情況:
Electron比較新捡偏,但已經(jīng)用在了一些知名公司比如Slack、微軟峡迷、WordPress和Sencha.(Codementor 也用了Electron做了它的桌面應用)银伟。Electron的簡單易用,使得它的生態(tài)系統(tǒng)和社區(qū)平臺也逐漸壯大绘搞。它的火熱程度可能會延續(xù)到2017彤避,使用Electron框架開發(fā)桌面應用,應該是開發(fā)者現(xiàn)在最好的選擇夯辖。
手機端框架對比:React Native vs Ionic
自從 React Native 橫空出世以來琉预,人們預測2016年將是React Native之年,考慮到跨平臺的開發(fā)模式蒿褂,未來將是手機開發(fā)和web技術的時代圆米。如果你谷歌一下React Native app性能 卒暂,你會發(fā)現(xiàn)很多贊揚。特別是在對比了HTML5 hybrid app娄帖,因為它跑起來更平滑也祠。是否2016屬于React Native之年?在宣傳和關注上近速,看來它是達到了預期的:
但實際是否是這樣呢诈嘿?當寫這篇文章時,React Native仍然沒有到達1.0版本(現(xiàn)在是0.26)削葱。所以奖亚,如果你現(xiàn)在想用React Native需要勇氣和耐心去處理一些app問題,可能需要重構代碼佩耳,還會有一些未知的問題(Codementor也僅僅使用在手機端)遂蛀。因此,我們再看一下React Nativc 和 Ionic 在npm的下載對比:
出自 npm trends
從這個圖可以看出干厚,似乎React Naitve正在以它的方式李滴,超越ionic成為最佳的跨平臺移動開發(fā)框架。
在如今的就業(yè)市場中蛮瞄,掌握React Native技術的人才也變得比ionic更加搶手所坯。
出自 indeed.com
在AngelList的招聘列表中我們做了簡單的統(tǒng)計,這個結(jié)果體現(xiàn)了同樣的問題:在5月30號左右挂捅,有75個關于ionic的招聘芹助,有65個關于react native的招聘數(shù)據(jù)。
因此闲先,如果在你的簡歷中有熟悉React Native技術状土。在2016年,雇主們絕對會給你的提供更高的薪資伺糠。
webAPI的未來 : GraphQL vs REST
2016年蒙谓,在Facebook宣布開源GraphQL之后,這使得大量的JavaScript開發(fā)人員開始從事它的研究训桶。特別是在開源項目上累驮,F(xiàn)acebook在蘋果的JavaScript領域做了很多貢獻:
GraphQL目標是替代REST API,但REST API已經(jīng)應用的更加廣泛了舵揭,這是不太可能的情況:
GraphQL很難取代REST API谤专。充其量,它可以補充REST API所提供不到的東西午绳。而且置侍,GraphQL仍然比較新,還很依賴Facebook,所以它沒有足夠的學習資源來讓開發(fā)者來提高墅垮。因此惕医,2016年對于GraphQL來說,還是不足以使引起開發(fā)者的足夠興趣算色。2017年也許會改變抬伺,但是2016年5月30號在AngelList中可以看到,僅僅只有6個招聘是對GraphQL有需求灾梦。所以你可以不必急于學習它峡钓。
JavaScript走勢的結(jié)論
JavaScript社區(qū)總體發(fā)展是比較快的。為了保持主流定位若河,必須有更多的資源和支持等一些相關信息能岩。基于本文的JavaScript的趨勢總結(jié)萧福,如今的開發(fā)人員需要學習React + Redux拉鹃,需要熟悉函數(shù)式編程,學習TypeScript鲫忍。此外膏燕,還需要關注其他領域,React Native等悟民,同時有一些Electron的經(jīng)驗可能會更好坝辫。(當然,TDD測試驅(qū)動開發(fā)射亏,無論何時都是你要掌握的技能)近忙。