2017年,你需要學(xué)習(xí)的JavaScript框架和主題

本文轉(zhuǎn)載自:眾成翻譯
譯者:cherryvenus
鏈接:http://www.zcfy.cc/article/2212
原文:https://medium.com/javascript-scene/top-javascript-frameworks-topics-to-learn-in-2017-700a397b711#.wjdqwi2hr

隨著JavaScript的普及,應(yīng)運(yùn)而生了一個(gè)非常活躍的集技術(shù),框架和庫(kù)為一體的生態(tài)圈。由于這個(gè)充滿多樣性的和活力的生態(tài)圈,因此大家非常困惑。應(yīng)該學(xué)習(xí)哪種技術(shù)?

你應(yīng)該投資哪一種技術(shù)才能獲得最大的收益?公司現(xiàn)在最需要招的人最需要哪一種技術(shù)堆棧?哪一個(gè)發(fā)展空間最大?

現(xiàn)在最需要了解的是哪個(gè)技術(shù)?這篇文章高度概括了你所需要了解的內(nèi)容,同時(shí)附上了鏈接,你可以自行了解。

記住,當(dāng)你正在實(shí)驗(yàn)一些新的代碼,你可以在Codepen.io上玩玩,如果你在學(xué)習(xí)ES6,那么你可以看看如何使用Babel REPL編譯。

這個(gè)學(xué)習(xí)的列表很長(zhǎng),但是你不用感到灰心。你可以做到的!如果你在研究這列表,擔(dān)憂該如何學(xué)習(xí)這一切,如何創(chuàng)建現(xiàn)代APP,移步閱讀“為什么我該感謝JavaScript疲勞”。然后開始認(rèn)真學(xué)習(xí),動(dòng)起來。

選擇性學(xué)習(xí)的一個(gè)注意事項(xiàng)

有些內(nèi)容是完全可選的,也就是說,如果你對(duì)我推薦東西此感興趣,或者工作需要,但是你不能感覺是被迫學(xué)的。每一個(gè)打了星號(hào)(*)的(比如 example* )就是可選的。

沒有打*的,都是必須學(xué)的,但是并不是所有的都是一定要學(xué)透的,你需要熟悉每一樣內(nèi)容。你需要了解可選的內(nèi)容,但是你完全沒有必要精通所有的。

JavaScript & DOM 基礎(chǔ)

在你找到JavaScript的工作之前,你需要掌握J(rèn)avaScript的基礎(chǔ):

  • 固定方法: 標(biāo)準(zhǔn)數(shù)據(jù)類型的學(xué)習(xí)方法(特別是 數(shù)組對(duì)象字符串, 和數(shù)字)。

  • 函數(shù) & 純函數(shù): 可能你覺得已經(jīng)很好地掌握了函數(shù),但是JavaScript經(jīng)常事與愿違,你需要學(xué)會(huì)純函數(shù)以掌握函數(shù)編程。

  • 閉包: 學(xué)習(xí)JavaScript函數(shù)作用域是如何運(yùn)行的.

  • 回調(diào): 回調(diào)是當(dāng)另一個(gè)函數(shù)運(yùn)行結(jié)束的時(shí)候,發(fā)出信號(hào)調(diào)用函數(shù)。可以這么說,“做你自己的事,做完了再叫我”。

  • Promises: promise是處理終值的方法。當(dāng)一個(gè)函數(shù)返回一個(gè)promise,你可以用.then()方法添加回調(diào),在promise完成之后運(yùn)行。終值會(huì)傳入你的回調(diào)函數(shù)中。比如 doSomething().then(value => console.log(value));

工具

  • Chrome Dev Tools: DOM inspectJS debugger: 最好用的調(diào)試器,盡管在我看來, Firefox也有一些你會(huì)非常想嘗試而且很酷的工具。

  • npm: JavaScript的標(biāo)準(zhǔn)語言開源包存儲(chǔ)庫(kù)。

  • git GitHub: 分布式版本管理——與你的源代碼的每次改變保持一致。

  • Babel: 用于編譯ES6,使之可以兼容過時(shí)版本瀏覽器。

  • Webpack:
    最受歡迎的用于標(biāo)準(zhǔn)JavaScript的打包工具,通過簡(jiǎn)單的啟動(dòng)工具包/樣例配置案例,讓東西快速運(yùn)行。

  • Atom, VSCode, 或者 WebStorm + vim: 你需要一個(gè)編輯器。 Atom和VSCode是現(xiàn)在最受歡迎的 JS編輯器。Webstorm是另一個(gè)解決方案,穩(wěn)健維護(hù)的優(yōu)質(zhì)工具。 我推薦學(xué)習(xí)vim, 或者至少記錄cheat sheet,你遲早會(huì)用到, 因?yàn)闀?huì)需要在服務(wù)器上編輯文件的, 并且這是最方便的方法——vim在每個(gè)Unix兼容的操作系統(tǒng)都有安裝,并且在SSH終端鏈接上運(yùn)行得很好。

  • ESLint: 盡早捕獲語法錯(cuò)誤和樣式問題。 代碼審查和TDD之后, 第三件你能做的事就是在代碼中減少bug。

  • Tern.js: 標(biāo)準(zhǔn) JavaScript的類型診斷工具, 并且是我最近最愛用于JavaScript的類型相關(guān)工具——沒有編譯步驟 或者注釋。我嘗試了所有的此類工具, 發(fā)現(xiàn)Tern.js大部分的優(yōu)點(diǎn)都提供,并且給JS使用靜態(tài)類型系統(tǒng),幾乎沒有成本。

  • Yarn*: 和npm類似, 但是他的安裝行為是決定論的, 并且Yarn以比npm快為目標(biāo)。

  • TypeScript:* JavaScript的靜態(tài)類型。除非你在學(xué)習(xí)Angular2,不然這完全可選。 如果你沒有在用Angular 2, 在選擇TypeScript之前需要仔細(xì)評(píng)估一下。我很喜歡它的,并且我敬佩TypeScript團(tuán)隊(duì)的出色工作, 但是你還是需要了解一些權(quán)衡。必讀: “靜態(tài)類型,令人震驚的秘密”以及“你可能不需要TypeScript”.

  • Flow:* JavaScript靜態(tài)類型檢查器。 查看“TypeScript vs Flow”,以獲得深刻的理解和客觀的對(duì)比。記住,我有一些困難需要Flow給我好的IDE反饋,即使使用Nuclide

React

React 是一個(gè)由Facebook創(chuàng)建的用于構(gòu)建用戶接口的JavaScript庫(kù)。 這是一個(gè)基于單向數(shù)據(jù)流的概念,意味著對(duì)于每次周期更新:

  1. React將輸入變成組件作為props,然后如果特定的Dom部分的數(shù)據(jù)發(fā)生了改變,那么就會(huì)只重新渲染滿足條件的部分。在這個(gè)階段更新的數(shù)據(jù),直到下一次渲染階段都不能重新觸發(fā)渲染。

  2. 事件處理階段 — DOM渲染之后,React監(jiān)聽事件, 將事件委托到DOM樹的根節(jié)點(diǎn)上的一個(gè)單獨(dú)監(jiān)聽器 (為了更好的性能)。 你可以監(jiān)聽這些事件并響應(yīng)更新數(shù)據(jù)。

  3. 數(shù)據(jù)的任何改變,步驟重新從第一步開始。

這和雙向綁定形成了對(duì)比,雙向綁定是DOM的改變會(huì)改變數(shù)據(jù)(比如,Angular 1 和Knockout)。使用雙向綁定,當(dāng)DOM渲染的時(shí)候(在Angular 1中稱之為digest cycle),DOM的改變可能會(huì)在渲染完成前重新觸發(fā)渲染階段,導(dǎo)致重新載入DOM和重繪——降低了性能。

React沒有規(guī)定一個(gè)數(shù)據(jù)管理系統(tǒng), 但是Flux-based方法是推薦的。 React的單向數(shù)據(jù)流方法,借鑒了函數(shù)編程和不可變的數(shù)據(jù)結(jié)構(gòu),改變了我們眼中的前端框架架構(gòu)。

想了解更多關(guān)于React和Flux架構(gòu), 請(qǐng)閱讀 “學(xué)習(xí)編程最好的方法就是開始編程: 從創(chuàng)建App中學(xué)習(xí)App架構(gòu)”.

  • create-react-app:* 最快了解React的方法。

  • react-router:* React的超級(jí)簡(jiǎn)單的路由(rotuer)。

  • Next.js:* 超簡(jiǎn)單的全局渲染,和 用于Node和React的路由.

  • velocity-react:* React動(dòng)畫——你可以使用VMD bookmarklet在您的頁面上做交互視覺動(dòng)態(tài)設(shè)計(jì)。

Redux

Redux給你的APP提供了事務(wù)處理的(transactional), 確定性(deterministic)狀態(tài)管理。在Redux中,我們通過迭代大量的操作對(duì)象,以減少當(dāng)前應(yīng)用程序狀態(tài)。想知道為什么這個(gè)很重要, 更多請(qǐng)看“給更好的Redux架構(gòu)的10個(gè)建議.”。想要開始使用Redux, 學(xué)習(xí)Redux的創(chuàng)建者Dan Abramov的極佳教程:

Redux對(duì)于生產(chǎn)項(xiàng)目是強(qiáng)制學(xué)習(xí)的,即使你從未用過Redux

為什么?因?yàn)樗o了你大量的練習(xí),教會(huì)你純函數(shù)的價(jià)值,以及教會(huì)你新的思考reducers的方式, 這是迭代數(shù)據(jù)集和從中獲取數(shù)據(jù)的通用的函數(shù)。 reducers 如此實(shí)用,以至于Array.prototype.reduce都被加入了JS規(guī)范。

Reducer不僅僅對(duì)于組數(shù)(array)是重要的,并且學(xué)習(xí)用Reducer的新方式處理問題,本身就十分有價(jià)值。

  • redux-saga:*Redux的處理同步方式副作用的庫(kù)。使用這個(gè)去處理I/O(比如處理網(wǎng)絡(luò)請(qǐng)求)。

Angular 2*

Angular 2是繼來自谷歌的廣受歡迎的Angular之后的框架。因?yàn)檫@太受歡迎了, 這會(huì)讓你的簡(jiǎn)歷看上去十分高大上——不過我建議還是先學(xué)React。

與Angular 2相比,我更愛React,因?yàn)?

  1. 這個(gè)更簡(jiǎn)單, 以及……

  2. 這十分受歡迎,并且有許多相關(guān)職位 (當(dāng)然 Angular 2也是的)

因?yàn)檫@個(gè)原因,我推薦學(xué)習(xí)React, 但是我認(rèn)為 Angular 2 完全是可選的*。 如果你非常喜歡Angular 2, 那么就換過來. 先學(xué)Angular 2,將React列為可選。 每一個(gè)對(duì)你的簡(jiǎn)歷來說都是受益匪淺的。

無論你選哪一個(gè),試著集中精力學(xué)習(xí)至少半年到一年,之后再去學(xué)習(xí)另一個(gè)。這需要時(shí)間,你才能真正熟練掌握。

RxJS*

RxJS是JavaScript的一些響應(yīng)式編程工具。可以當(dāng)作Lodash中的流。響應(yīng)式編程已經(jīng)正式登陸JavaScript的舞臺(tái)。ECMAScript的Observables提案是階段一的初稿, 而RxJS 5+是Observables權(quán)威標(biāo)準(zhǔn)的實(shí)現(xiàn)。

盡管我非常愛RxJS, 但是如果你一次性加載所有的包 你的包會(huì)膨脹地很厲害 (這里有許多操作)。為了控制包的大小, 不要加載所有的內(nèi)容。請(qǐng)使用補(bǔ)丁加載:

使用補(bǔ)丁加載能夠?qū)⒛愕陌鼘?duì)于rxjs依賴減少大約200k。這真的非常劃算。這會(huì)讓你的app變得更快

EDIT: 為什么你不列出 ?

許多人問我,為何不列出他們喜歡的框架。我評(píng)判框架的其中一個(gè)標(biāo)準(zhǔn)就是“這真的會(huì)在工作上用到?”。

是的,有一個(gè)框架的人氣投票。但是當(dāng)你決定耗費(fèi)時(shí)間專注學(xué)習(xí)一個(gè)框架,這是否會(huì)脫穎而出是個(gè)非常重要的考慮因素。

為了回答這個(gè)問題,我看了一些關(guān)鍵指標(biāo)。首先,谷歌趨勢(shì)(Google Trends)。如果你想要重現(xiàn)這個(gè)谷歌趨勢(shì)圖表,記得要選擇主題(topic),而不是關(guān)鍵字(keyword),因?yàn)檫@些詞會(huì)過濾掉許多錯(cuò)誤信息。換句話說,這些是主題趨勢(shì),而不是關(guān)鍵字搜索

谷歌趨勢(shì)上的JS主題

這個(gè)告訴我們?cè)诓煌?xiàng)目中的相對(duì)興趣。如果人們搜索他們,那么很有可能在探索他們的選擇,或者查找?guī)椭蛭臋n。這是相對(duì)使用水平的一個(gè)非常不錯(cuò)的指標(biāo)。

另一個(gè)數(shù)據(jù)的有效來源是Indeed.com,這個(gè)集合了來自大量不同渠道的職位表數(shù)據(jù)。職位投遞熱點(diǎn)最近急速下降,但是他們依然收集足夠的數(shù)據(jù),來做有效的相對(duì)對(duì)比,從而告訴你在生產(chǎn)項(xiàng)目中人們真正使用的框架。從職位中:

想要重現(xiàn)這些發(fā)現(xiàn),搜索javascript,然后工作地點(diǎn)保持空白。你就可以清晰看到:

Angular和React占領(lǐng)絕對(duì)優(yōu)勢(shì):沒有可以與之相提并論的。 (除了 在網(wǎng)站中具有巨大份額的jQuery——不包括app——因?yàn)樗糜谒械倪z留系統(tǒng),包括受歡迎的CMS系統(tǒng),比如WordPress)。

在這些列表中,與React相比,Angular具有絕對(duì)優(yōu)勢(shì)。那么為什么我推薦先學(xué)React? 因?yàn)椋?/p>

  1. 越來越多的人開始學(xué)React,而不是Angular。

  2. 在用戶體驗(yàn)上,React領(lǐng)先Angular。

換句話說, React贏得了思維占有率和用戶滿意度的競(jìng)爭(zhēng),并且如果按照過去幾年的趨勢(shì),只需要按照一半的程度繼續(xù)下去,React完全有可能超越Angular作為主要的前端框架。

Angular 2也有可能扭轉(zhuǎn)戰(zhàn)局,,因此Angular也有可能東山再起,但是到目前為止, React確實(shí)打了一場(chǎng)漂亮的仗.

觀察中的框架

  • Vue.js*****擁有大量的GitHub的星星和下載量。如果這樣持續(xù)下去,它在2017年會(huì)表現(xiàn)地非常好,但是我不認(rèn)為它在未來的一年內(nèi)會(huì)擠走React或者Angular(這兩者都成長(zhǎng)地非常快)。你學(xué)好了React或者Angular之后再學(xué)這個(gè)吧。

  • MobX***** 是一個(gè)很贊的數(shù)據(jù)管理庫(kù),它已經(jīng)是Redux的一個(gè)非常受歡迎的替代品。這也成長(zhǎng)地很快, 我預(yù)期它會(huì)在2017年有所表現(xiàn)。我喜歡給所有的app使用Redux,但是在有些特定的情況下,Mobx是個(gè)更好的選擇。比如,如果在你的頁面上有成百上千的動(dòng)態(tài)DOM對(duì)象, Mobx可能會(huì)表現(xiàn)更好。 同樣, 如果你的app工作流都是簡(jiǎn)單的操作,并且你不需要事務(wù)(Transactional)和可確定狀態(tài)(Deterministic State),你完全就不需要使用Redux。MobX絕對(duì)是一個(gè)更簡(jiǎn)單的解決方案。 不過,你學(xué)會(huì)Redux之后再來學(xué)這個(gè)吧。

下一步

現(xiàn)在你已經(jīng)研究了所有的熱點(diǎn)技術(shù),請(qǐng)閱讀“在5步內(nèi),獲得你的第一個(gè)開發(fā)工作”.

提升你的JavaScript游戲。 如果你不是其中一員,你會(huì)錯(cuò)過的。


Eric Elliott “Programming JavaScript Applications” (O’Reilly)和 “Learn JavaScript with Eric Elliott”的作者. 他將他的軟件經(jīng)驗(yàn)貢獻(xiàn)給了 Adobe Systems, Zumba Fitness The Wall Street Journal ESPN BBC, 以及頂級(jí)唱片人包括 Usher Frank Ocean Metallica等等。

他和世上最美的女人常年居住在舊金山港灣區(qū)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容