對於今年的JavaScript狀態調查,我想深刻挖掘一下,不只知道人們正在使用哪些工具和庫,還要爲何他們選擇使用它們。前端
這意味着我必須找到一種方法將我的偏好轉化爲冷酷的數據。通過一些研究,我提出了12分制,涵蓋了挑選和使用任何技術的主要方面。react
在此邀請你參加測試 ➡️ Take the 12-Factor Quiz
若是您不肯定要評估什麼,只需在您熟悉的庫(React,Vue,jQuery ......)上進行評!
也能夠在http://stateofjs.com/ 上面查看一下往年的結果
若是您想貢獻並幫助肯定JavaScript生態系統的最新趨勢,參加調查!web
如今回到12分制。瀏覽器
這裏有一張列表:安全
我將解釋每一個因素的重要性,併爲您提供一個評分網格,向您展現如何評估它。咱們來看看清單吧!服務器
你選擇任何技術的第一個緣由多是它的做用。app
但這裏的關鍵問題是你到底是須要這個庫的什麼。React多是目前最流行的前端庫,但仍是有人以爲它作的不夠好,由於它將路由和狀態管理等內容留給第三方方庫,如React-Router和Redux。框架
事實上,這是React最大競爭對手Vue的吸引力的一個重要部分。經過爲這些常見用例提供官方軟件包,它能夠提供更全面的解決方案並得到大量支持。webapp
因此有時候,最簡單的方法就是弄清楚咱們究竟須要什麼。像Lodash或Ramda這樣的庫讓你能夠用簡潔的函數表達式替換亂糟糟的嵌套for循環,這足以使它們成爲無價的工具。編輯器
一樣,這一切都是爲了尋找合適的!
評分系統
您能夠擁有最優雅,功能全面的框架,但若是開發人員每兩分鐘發生一次錯誤,卻也一樣讓人感到崩潰。
所以,當前JavaScript生態系統中的許多工具都專一於爲堆棧添加穩定性和安全性。看TypeScript和Flow的成功,甚至是Reason等語言。
在數據層方面,GraphQL的類型系統也有助於確保一切順利運行。
評分系統
若是你曾經訓練過武術,你就會知道你能夠擁有的最好的屬性之一是speed,而不是力量。
一樣,若是您的應用須要15秒才能加載,那麼世界上的全部功能都無濟於事。到那個時候,用戶已經關閉了標籤,你甚至在它開始以前就已經失去了戰鬥!
在JavaScript生態系統中,只需看看Preact就能夠看到關注速度的一個例子:它的API與React徹底相同,因此它並不試圖在功能強度上展開競爭。可是,與React相比,它重量更輕,加載速度更快,能夠節省寶貴的毫秒數並提升webapp的性能。
評分系統
在投資任何新技術以前,重要的是要看看圍繞它開發的生態系統。
一個充滿活力的軟件包生態系統不只能夠節省大量時間,這也代表該技術已經達到了必定的成熟度水平。出於這個緣由,維護良好的第三方軟件包是開發人員長期採用技術的最佳標誌之一。
評分系統
另外一個要考慮的因素是整個社區。遇到問題時,專用論壇或Slack渠道能夠提供巨大的幫助。
查找Stack Overflow現有的存儲庫也頗有幫助。固然,維護良好的GitHub問題頁面是必須的!
評分系統
簡單的學習曲線使開發人員更有可能爲您的框架或庫提供一個機會。人們很容易認爲,若是一項技術真正具備破壞性,人們就會克服任何障礙,但這一般都不是真的。
一個密切相關(但有時相反)的概念是「採用」曲線。首次推出時,[Meteor](http://meteor.com/)很是易於使用(至少與現有替代方案相比),但它要求您當即採用整個堆棧,所以很難實現現有項目。
React也以其粗略的學習曲線而聞名:對於用於分離HTML和JavaScript的開發人員來講,不得不使用JSX可能很難。另外一方面,Vue變得更容易,而沒必要從新思考您對前端編碼的思考方式。
評分系統
簡單學習曲線的一個重要部分就是擁有出色的文檔。這比聽起來更難實現,由於撰寫文檔的人一般是經驗最豐富的人。
所以,編寫好的文檔須要忘記你原有的技術知識,並讓本身置身於發現你的技術之中。
它還須要預測常見問題,瞭解用戶的心理模型,最重要的是在代碼庫發生變化時保持最新狀態!全部這些都須要寶貴的時間......
鑑於全部這些因素,您能夠理解爲何好的文檔是一種罕見且有價值的東西!
評分系統
就像文檔同樣,工具是這些事情中的一個,對於某些維護者來講可能看起來像是次要的,但實際上對於任何技術的普及和成功都相當重要。
我相信Redux成功背後的一個重要緣由是其使人驚歎的Devtools瀏覽器擴展,它容許您以很是用戶友好的方式可視化Redux存儲和操做。一樣,VS Code的強大TypeScript支持也爲它的採用創造了奇蹟。
評分系統
由於若是一個庫只存在了六個月,那就不過是曇花一現了。
咱們均可以講述採用「下一件大事」的故事,只是回到好老的Rails / PHP / 在這裏插入嘗試真實的技術 當事情開始惡化時。
出於這個緣由,沒有什麼能夠打破堅實的記錄。Express是其中一個例子:它最初是在2010年發佈的,但仍然被認爲是默認的Node.js服務器框架,儘管JavaScript生態系統的發展速度很快。
評分系統
並不是全部項目都有可跟蹤的記錄。當package是全新的,你如何判斷它的潛力?一種可靠的方式來看看它背後的人。
當React第一次出現時,因爲其背後的團隊是Facebook,因此給人一種至少要嘗試一下的感受。而後Facebook繼續發佈Relay和GraphQL,代表React的成功不是僥倖!
更大的公司也有更多的投資資源:即便發佈了更新的,不兼容的版本,谷歌也可以繼續保持原有的Angular.js。
固然,這並不意味着單獨的維護者就沒法創造重大創新。畢竟有Vue.js這樣的例子存在,更不用說99%的開源軟件了。
評分系統
採用尖端庫的好處在於它們一般發展得很是快。可悲的是,這也多是一個重大的缺點!
快速改進率也意味着頻繁的突破性變化,由於新的最佳實踐取代了舊的模式,使早期採用者付出了重構成本。
React Router當他們決定在版本3和版本4之間徹底改變他們的API時,產生了不少抱怨。Angular當他們從Angular.js切換到新的「只是Angular」時,也是如此。
當你剛開始一個新項目時,常常更新會很使人興奮,可是一旦你的應用程序啓動並在生產中運行,你並不會想要每次都由於庫的更新而其改動線上的代碼。
評分系統
最後但一樣重要的是,勢頭。換句話說,炒做。
炒做一般被認爲是一件壞事(「不要成爲炒做的犧牲品」),做爲風格超過實質的指標。但並不是老是如此。
有了足夠的動力,一個新的軟件項目能夠吸引更多的用戶和更多的貢獻者,這意味着能夠更快地找到和修復錯誤,一個包生態系統能夠開發,每一個人最終都會變得更好。
可是,是的,還有硬幣的另外一面:過早炒做太多可能會讓潛在用戶面臨一個充滿問題的未完成版本,並將其完全解決。就像他們說的那樣,你只有一次機會給人留下第一印象。
評分系統
大家中的一些人提出了一些更重要的因素。要考慮潛在版本2.0的規模!