【第769期】2016 JavaScript 發展現狀大調查

圖片
前言

一旦臨近年底,各種總結,各種評選頒獎。那麼作爲有點“亂”的前端界,必須也要參與參與。那麼來看看由@餘博倫的翻譯分享。ps:文末可以看到2016年的各種總結。雖然調查的是國外,國內的你也可以參考參考。


正文從這開始~


有人認爲JavaScript是最好的語言,有人認爲它一團糟。可按照C++之父的話來講:


世界上只有兩種編程語言:一種是天天被人噴的,另一種是沒人用的。


不論你喜歡承認與否,JavaScript已經一天比一天火了,甚至火得有點過頭,生態圈太過繁榮,每個月都可能有新的相關構建工具、開發框架或者別的什麼庫發佈。


前段時間歪果仁對JS的發展現狀專門做了一個調查,發起者是Sacha Greif(【第761期】6周學習計劃,攻克JavaScript難關)。全世界有超過9000名開發者參與了此次調查,內容涉及:

  • 代碼風格(JS預編譯語言)

  • 前端框架

  • 狀態管理

  • API層

  • 全棧框架

  • 測試框架

  • CSS 構建工具/預處理器

  • 構建工具

  • 移動端框架

  • 新特性

以及一些別的JS相關話題的意見和討論。


JavaScript的發展現狀


JavaScript已經逐步發展成爲了一門流行可靠的語言,但與此同時也變得臃腫起來,框架工具之間各種複雜的依賴甚至能讓你崩潰。


對於本來就有選擇恐懼症的你來說更是噩夢:你應該用React還是Angular 2?你真的需要使用Webpack麼?這個月又有什麼新的處理CSS的解決方案?


我每天也會爲類似的問題頭疼,所以纔有了這個調查,我在2周的時間裏就收到了超過9000份回覆。


代碼風格


總評:

  • ES6成爲了新的標準

  • CoffeeScript已經過氣了

  • 新一波的流行趨勢正在襲來


JavaScript擁有不止一種語法,自2009年CoffeeScript出現後,各式各樣的JS語法,轉編譯語言如雨後春筍般湧現出來:ES6, TypeScript, Elm……

圖片


先解釋一下這個統計圖怎麼看,受訪者一共有5種選項:

  • Never heard of it 從來沒聽說過

  • Heard of it, not interested 聽說過但是沒興趣

  • Heard of it, would like to learn 聽說過,打算學着用用看

  • Used it before, would not use again 用過了,不想再用了

  • Used it before, would use again 用過,並且還會繼續用下去

  • ES6, CoffeeScript, 和 TypeScript都已經家喻戶曉了,而TypeScript看上去卻並沒有另外兩個那麼受歡迎。


Elm 和 ClojureScript就不是那麼廣爲人知了,它們還多少侷限在自己獨立的生態體系裏。


雖然ES6還沒有正式被瀏覽器兼容,可是絕大多數開發者都已經嘗試過它的語法了。


TypeScript 和 Elm可能是因爲對普通的JS開發者來說不是特別友好,所以很多人都是抱着想試試的態度卻還沒有嘗試過,畢竟對於只知道JS的程序員來說,靜態類型都是很難理解的概念。


前端框架


總評:

  • 選擇React準兒沒錯

  • Vue越來越火

  • Angular 2 要比 1 強

圖片


框架的優劣經常是人們爭論的焦點。在調查提供的幾個選項中,除了比較新的Vue以外,所有框架基本都是人盡皆知的。


Angular 2 纔剛剛推出,所以它從開發階段到實際應用肯定還有個過程。從統計數據上來看,React是毫無爭議的贏家。由於Vue卓越的性能表現,它在滿意度方面已經排到了第二位。


補錄其他:

image.png


狀態管理


總評:

  • Redux 是最火的

  • 大家採用的其實還是Flux的理念

image.png


狀態管理逐漸成爲了一種新類型的JS輪子。當前並不是對所有的開發者都適用。


Redux顯然是最火了,而作爲Redux第一大替代品的Mobx,仍然有很多人沒聽說過。


Redux的開發者Dan Abramov自己也反覆強調過,並不是所有的應用都需要使用Redux,等到你真正有相關需求的時候再說。


補錄其他:

image.png


API 層


總評:

  • GraphQL 看起來比較有前途

  • REST APIs 仍然是最廣泛適用的

image.png


REST APIs肯定就不用說了,大家都在用。Firebase因爲它自身實時BaaS(back-end-as-a-service)的特性也算擁有了一定的佔有率(國內的朋友假如你沒聽說過Firebase,那你多少應該聽說過某狗實時後端雲)。


而近一段時間被炒得火熱的GraphQL,雖然有很多人感興趣,肯定還需要一定時間才能發展起來。


補錄其他:

image.png


全棧框架


總評:

  • 最主流的是Meteor和MEAN

  • 這種“一體化”框架並沒有那麼受歡迎

image.png


Meteor 是全棧框架裏的領導者。與此同時,使用MEAN(Mongo + Express + AngularJS + Node.js)架構的開發者也有很多,並且在滿意度方面它是表現最好的。


除此之外,火起來的還有用React-Redux替代AngularJS的MERN框架。


測試框架


總評:

  • 最主流的是Mocha和Jasmine

  • 開發者總體上對JS的測試不是特別滿意

image.png


CSS 構建工具/預處理器


總評:

  • SASS/SCSS是主導

  • CSS Modules 值得一試

image.png


CSS看上去可能和JavaScript沒什麼關係,可越來越多的構建工具和框架中把它們結合到了一起。


CSS本身也像JS一樣,有着很多受人詬病的缺點。所以人們發明了很多CSS預處理器或者工具等等,來擴展優化原生的CSS,例如SASS, LESS, 和 CSS Modules .


補錄其他:



構建工具


總評:

  • Webpack 和 Gulp最受歡迎

  • Grunt 已經過氣了

image.png


調查中涉及的每種工具還都算比較主流的。不出意外,只有兩歲的Webpack是最大的贏家(知名度/吸引力/滿意度綜合),Webpack是一種可以打包構建一切甚至包括你的圖片音視頻一類靜態資源的工具,而且可以靈活配套各種插件使用。


補錄其他:

image.png


移動端框架


總評:

  • 原生應用還是最主流的解決方案

  • React Native 證明了它自己

image.png


通過JS來開發移動應用的這種實現纔出現不久,大部分人還是在採用開發原生App的解決方案。


但原生的弊病是你必須專門爲相應的系統平臺開發,這樣下來就會有很高的成本。


JavaScript提供了一種同時開發iOS/Android平臺應用的解決方案(WP用戶哭暈在廁所)。只掌握前端開發語言的程序員甚至可以在各種設備上寫App了,越來越多的人開始使用這類技術。


React Native在滿意度和受歡迎程度上都是表現最好的。


Cordova 和 PhoneGap 越來越不行主要是因爲它們的性能實在是個問題。


補錄其他:

image.png


新特性


服務器端渲染


JavaScript 應用的誕生本來就是爲了發揮更多瀏覽器的效用,而不是每次都需要服務器來處理邏輯和數據。


但服務器當然也有它自己的效用。通過服務器端渲染可以直接把生成好的頁面內容發送到客戶端,由此你可以提高應用的性能,改善交互,並且也順帶解決了SEO和可訪問性的問題。


服務器端渲染對於一些以內容爲主的站點至關重要,而對於一些需要登錄使用的Web App 並且不擔心SEO的站點就不是那麼有用了。所以大多數的開發者只覺得服務器端渲染只能算一個Nice-to-have的特性。


Code splitting代碼拆分/按需加載


雖然JavaScript是一個已有十多年曆史的語言,JS應用在工程化方面的發展纔剛剛萌芽。所以絕大多數的應用還是把打包好的所有代碼直接發給客戶端。


Code splitting 可以將你的代碼拆分,只在客戶端加載真正需要的使用的代碼,由此可以極大地提高性能。


Optimistic Updates即時更新


一些複雜的JavaScript應用有着大量的客戶端服務器交互。通過Optimistic Updates技術,客戶端可以無需等待服務器的響應,直接顯示出交互的結果,之後再處理服務器與客戶端直接不同步的數據。


Hot Module Reloading模塊熱重載


Hot Module Reloading指的就是在開發過程中,你修改代碼之後無需刷新瀏覽器頁面,馬上就能看到改變後的效果。這也是爲什麼很多開發者大愛這一特性的原因。


Time-Travel Debugging


Time-Travel Debugging是一種新的調試模式,指的是在調試使用Redux一類狀態管理的應用時,模擬應用在各個不同狀態的改變。


Real-Time Operations實時交互


隨着瀏覽器日趨強大,網速日益提升。實時交互的特性會越來越普遍。(例如知乎不用刷新頁面就可以收到新提醒的這類特性)


Dead Code Elimination冗餘代碼消除


現在,一方面你可以讓客戶端按需加載代碼,另外一方面,你也可以直接在構建過程中無用的代碼。這部分內容其實在本專欄的JavaScript 模塊化入門Ⅱ:模塊打包構建中介紹過。


Progressive Enhancement漸進式增強


JavaScript 的各種特性確實很酷。但是想象一下你的應用如果運行在一個很破的設備或很差的網絡中會怎麼樣。所以我們就需要一種漸進式增強的設計,先加載你應用最基本最主要的功能,然後再逐步加載完畢。(類似於一些網站提供的基本版/極速版)


特性排名:

圖片

觀點


  • 現在開發JavaScript有些過於複雜了

通過整個調查我們很容易就能發現這一點


  • JavaScript被過度使用了

網頁中是否過多地使用了JS?這一點JS程序員肯定不會同意


  • JavaScript的發展變化實在是太快了

等你剛掌握了Grunt,Gulp火了,等你剛學會Gulp,大家又開始用Webpack了


  • 我願意選擇JS作爲我最主要的編程語言

JS的名聲一直不怎麼好(在某些人眼裏是迫不得已纔會去使用的語言),但在

今天大多數開發者不是因爲他們不得不使用JS,而是他們真的願意。


  • JavaScript前途一片大好

JavaScript虐我千百遍,我待JavaScript如初戀,絕大多數的開發者還是很看好JS的發展前景的。


  • 我很享受用JavaScript開發App

JavaScript確實是一門很有趣的語言


  • 這份調查問卷真**長!

(哭,我寫的都快累死了!)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章