2017年,你需要學習的JavaScript框架和主題

yr4560 8年前發布 | 54K 次閱讀 JavaScript開發 angularjs

隨著JavaScript的普及,應運而生了一個非常活躍的集技術,框架和庫為一體的生態圈。由于這個充滿多樣性的和活力的生態圈,因此大家非常困惑。應該學習哪種技術?

你應該投資哪一種技術才能獲得最大的收益?公司現在最需要招的人最需要哪一種技術堆棧?哪一個發展空間最大?

現在最需要了解的是哪個技術?這篇文章高度概括了你所需要了解的內容,同時附上了鏈接,你可以自行了解。

記住,當你正在實驗一些新的代碼,你可以在 Codepen.io 上玩玩,如果你在學習ES6,那么你可以看看如何使用 Babel REPL 編譯。

這個學習的列表很長,但是你不用感到灰心。你可以做到的!如果你在研究這列表,擔憂該如何學習這一切,如何創建現代APP,移步閱讀 “為什么我該感謝JavaScript疲勞” 。然后開始認真學習,動起來。

選擇性學習的一個注意事項

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

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

JavaScript & DOM 基礎

在你找到JavaScript的工作之前,你需要掌握JavaScript的基礎:

  • 固定方法:標準數據類型的學習方法(特別是 數組對象字符串 , 和 數字 )。

  • 函數 & 純函數 : 可能你覺得已經很好地掌握了函數,但是JavaScript經常事與愿違,你需要學會純函數以掌握函數編程。

  • 閉包 : 學習JavaScript函數作用域是如何運行的.

  • 回調: 回調是當另一個函數運行結束的時候,發出信號調用函數。可以這么說,“做你自己的事,做完了再叫我”。

  • Promises : promise是處理終值的方法。當一個函數返回一個promise,你可以用 .then() 方法添加回調,在promise完成之后運行。終值會傳入你的回調函數中。比如 doSomething().then(value => console.log(value)); 。

工具

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

  • npm : JavaScript的標準語言開源包存儲庫。

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

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

  • Webpack : 最受歡迎的用于標準JavaScript的打包工具,通過簡單的啟動工具包/樣例配置案例,讓東西快速運行。

  • Atom , VSCode , 或者 WebStorm + vim : 你需要一個編輯器。 Atom和VSCode是現在最受歡迎的 JS編輯器。Webstorm是另一個解決方案,穩健維護的優質工具。 我推薦學習vim, 或者至少記錄cheat sheet,你遲早會用到, 因為會需要在服務器上編輯文件的, 并且這是最方便的方法——vim在每個Unix兼容的操作系統都有安裝,并且在SSH終端鏈接上運行得很好。

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

  • Tern.js: 標準 JavaScript的類型診斷工具, 并且是我最近最愛用于JavaScript的類型相關工具——沒有編譯步驟 或者注釋。我嘗試了所有的此類工具, 發現Tern.js大部分的優點都提供,并且給JS使用靜態類型系統,幾乎沒有成本。

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

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

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

React

React 是一個由非死book創建的用于構建用戶接口的JavaScript庫。 這是一個基于單向數據流的概念,意味著對于每次周期更新:

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

  2. 事件處理階段 — DOM渲染之后,React監聽事件, 將事件委托到DOM樹的根節點上的一個單獨監聽器 (為了更好的性能)。 你可以監聽這些事件并響應更新數據。

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

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

React沒有規定一個數據管理系統, 但是Flux-based方法是推薦的。 React的單向數據流方法,借鑒了函數編程和不可變的數據結構,改變了我們眼中的前端框架架構。

想了解更多關于React和Flux架構, 請閱讀 “學習編程最好的方法就是開始編程: 從創建App中學習App架構” .

Redux

Redux 給你的APP提供了事務處理的(transactional), 確定性(deterministic)狀態管理。在Redux中,我們通過迭代大量的操作對象,以減少當前應用程序狀態。想知道為什么這個很重要, 更多請看 “給更好的Redux架構的10個建議.” 。想要開始使用Redux, 學習Redux的創建者 Dan Abramov 的極佳教程:

Redux對于生產項目是強制學習的,即使你從未用過Redux。

為什么?因為它給了你大量的練習,教會你 純函數 的價值,以及教會你新的思考 reducers 的方式, 這是迭代數據集和從中獲取數據的 通用的函數 。 reducers 如此實用,以至于 Array.prototype.reduce 都被加入了JS規范。

Reducer不僅僅對于組數(array)是重要的,并且學習用Reducer的新方式處理問題,本身就十分有價值。

  • redux-saga*: Redux的處理同步方式副作用的庫。使用這個去處理I/O(比如處理網絡請求)。

Angular 2*

Angular 2 是繼來自谷歌的廣受歡迎的Angular之后的框架。因為這太受歡迎了, 這會讓你的簡歷看上去十分高大上——不過我建議還是先學React。

與Angular 2相比,我更愛React ,因為:

  1. 這個更簡單, 以及……

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

因為這個原因,我推薦學習React, 但是我認為 Angular 2 完全是可選的* 。 如果你非常喜歡Angular 2, 那么就換過來. 先學Angular 2,將React列為可選。 每一個對你的簡歷來說都是受益匪淺的。

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

RxJS*

RxJS 是JavaScript的一些響應式編程工具。可以當作Lodash中的流。響應式編程已經正式登陸JavaScript的舞臺。ECMAScript的Observables提案是階段一的初稿, 而RxJS 5+是Observables權威標準的實現。

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

2017年,你需要學習的JavaScript框架和主題

使用補丁加載能夠將你的包對于rxjs依賴減少大約200k。這真的非常劃算。這會讓你的app變得 更快

EDIT: 為什么你不列出 ?

許多人問我,為何不列出他們喜歡的框架。我評判框架的其中一個標準就是“這真的會在工作上用到?”。

是的,有一個框架的人氣投票。但是當你決定耗費時間專注學習一個框架,這是否會脫穎而出是個非常重要的考慮因素。

為了回答這個問題,我看了一些關鍵指標。首先,谷歌趨勢(Google Trends)。如果你想要重現這個谷歌趨勢圖表,記得要選擇主題(topic),而不是關鍵字(keyword),因為這些詞會過濾掉許多錯誤信息。換句話說,這些是主題趨勢, 而不是關鍵字搜索

谷歌趨勢上的JS主題

這個告訴我們在不同項目中的相對興趣。如果人們搜索他們,那么很有可能在探索他們的選擇,或者查找幫助或文檔。這是相對使用水平的一個非常不錯的指標。

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

想要重現這些發現,搜索javascript,然后工作地點保持空白。你就可以清晰看到:

Angular和React占領絕對優勢:沒有可以與之相提并論的。(除了 在網站中具有巨大份額的jQuery——不包括app——因為它用于所有的遺留系統,包括受歡迎的CMS系統,比如WordPress)。

在這些列表中,與React相比,Angular具有絕對優勢。那么為什么我推薦先學React? 因為:

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

  2. 在用戶體驗上,React領先Angular。

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

Angular 2也有可能扭轉戰局,,因此Angular也有可能東山再起,但是到目前為止, React確實打了一場漂亮的仗.

觀察中的框架

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

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

 

來自:http://www.zcfy.cc/article/top-javascript-frameworks-amp-topics-to-learn-in-2017-2212.html

 

 本文由用戶 yr4560 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!