精讀《12 個評估 JS 庫你需要關心的事》

来源:https://www.cnblogs.com/lalalagq/archive/2018/10/06/9747836.html
-Advertisement-
Play Games

1 引言 作者給出了從 12 個角度全面分析 JS 庫的可用性,分別是: 特性。 穩定性。 性能。 包生態。 社區。 學習曲線。 文檔。 工具。 發展歷史。 團隊。 相容性。 趨勢。 下麵總結一下作者的觀點。 2 概述 & 精讀 特性 當你調研一個 JS 庫,功能當然是最重要的,就好比 Re ...


1 引言

作者給出了從 12 個角度全面分析 JS 庫的可用性,分別是:

  1. 特性。
  2. 穩定性。
  3. 性能。
  4. 包生態。
  5. 社區。
  6. 學習曲線。
  7. 文檔。
  8. 工具。
  9. 發展歷史。
  10. 團隊。
  11. 相容性。
  12. 趨勢。

下麵總結一下作者的觀點。

2 概述 & 精讀

特性

當你調研一個 JS 庫,功能當然是最重要的,就好比 React 的用於開發 UI 界面非常方便,這是流行起來的一部分因素。

但同時 React 解決的問題很聚焦,於是把例如 Router 和 Store 部分交給社區給解決方案,這就讓 Vue 的官方維護生態模式發展了起來。但這更多取決於你的偏好,像 lodash 這種精簡的庫也會長盛不衰,重要的是這個庫提供的能力是否解決了你的業務問題。

評分:A - 化腐朽為神奇。B - 更優雅的解決方案。C - 比現有方案差。

穩定性

這個庫如果經常出 BUG,那顯然無法在生產環境使用。最好經過嚴格的測試,保證這個庫一定不會出錯,這樣我們就可以專心排查業務的問題了。

評分:A - BUG 很少,方便調試。B - 不會影響你的穩定性,比如出 BUG 概率和你的業務代碼相近。C - 引入該庫會讓你背線上故障。

性能

如果讓用戶 15 秒才能打開網頁,那一切都是徒勞。

拿 PReact 為例子,為什麼 API 相同的輪子可以活下來?因為體積小,而且 PReact 把宣傳重點放在性能上。

如何一句話說明白你不是在造無用的輪子?性能更好。

評分:A - 小體積,高性能,支持各種黑科技特性比如 Tree shaking。B - 對性能沒有影響。C - 導致性能降低。

包生態

用過 monaco-editor 嗎?大家都在用 webpack 但它卻走 amd 路線,我不知道你用什麼方法讓它支持 commonjs 的,但這一定耽誤了你不少時間。

包生態包括第三方包的成熟度,包的使用難易度,支持多少種模塊化方案,是否支持 TS,有沒有管理好自己的依賴等等。

開箱即用是最好的,有長期維護組織的更佳。

同時不要有太多相互競爭的社區方案為佳。比如工具庫用 lodash 這很容易,但 React 數據流方案選擇哪個?太多的競爭對手不斷寫軟文搶奪用戶(程式員)的註意力,試圖說服他們加班重構。

評分:A - 方案唯一且生態運作良好,維護記錄標準規範且順暢。B - 很多新晉網紅包,且競爭選擇多。C - 沒有人給你做包,想用要自己封裝。

社區

能否快速在 Stack Overflow 搜到問題的答案能反映出社區的活躍度,不論是官方文檔還是第三方進行的問答。

社區越活躍,幫你提前踩的坑就越多,如果你遇到一個大家都沒有遇到過的問題,並不代表你用得有多深度,而可能你根本就用錯庫了。

評分:A - 各種論壇每日都很活躍,Github issue 問題日清。B - 論壇/聊天室不太活躍。C - 除了作者自吹的文檔,再也找不到任何相關信息了。

學習曲線

不要以為把庫功能做的強大,就算難用點也會有用戶跪舔,這是幻覺。

Vue 之所以那麼火爆,是因為原生 HTML 的門檻比 JSX 低,而使用 React 的用戶往往都覺得 JSX 比 HTML 門檻低。我也不知道該怎麼描述,從 JS 可以產生一切的角度,學習 HTML 反而被認為是高門檻的體現。

所以認清現實,JSX Star 多並不是其理論有多先進(理論確實先進),而是很多人覺得整體學習維護成本比 HTML 低。

評分:A - 一天就能成為這個庫的熟練搬磚工。B - 浪費了一周時間才能投入使用。C - 學了一周才發現之前的理解是錯的,而且認識到這隻是個開始。

文檔

寫文檔的人一般都是庫的作者,這種人一般經驗會比較豐富,寫起文檔一般不會考慮初學者的感受,所以找到一份對初學者友好的文檔還是挺不容易的。

對於庫的維護者,要站在初學者角度去寫文檔,站在使用者角度,如果文檔開頭就看不懂的話,最好儘早換個文檔或者換個庫。

評分:A - 專門維護文檔站點、視頻、圖片、示例項目,再好一點的話可以有專門基金會組織編程比賽,通過某三歲孩子可以一天入門強力影射技術生態的完備性。B - 有最基本的 Readme 和 API 文檔。C - Readme 寫的是 Create react app,其他的只能查源碼了。

工具

工具可以從多個維度體現出這個庫的優勢,首先是確實帶來了使用方便,其次展示了團隊維護實力的雄厚(精力溢出到可以做周邊工具了)。

Redux 之所以這麼火,Redux dev tools 功不可沒,筆者讀過一些心理學書籍,也經歷過一些技術選型,看到 Redux dev tools 的圖形化界面後,大腦因為受到視覺衝擊比理性的邏輯思考大太多,潛意識裡給 Redux 加了不少分,導致討論結果都變得不太理性了。

如果你的庫能圖形化表達,或者做一個 PPT 或者輔助工具,那一定會大大加分。(React chrome 插件在打開 react 做的網頁時亮起來真的很酷,這個勛章很有儀式感,以至於我不想換一個框架)

評分:A - 兩個以上的工具,包括瀏覽器拓展、代碼編輯器拓展、CLI 工具或者 SaaS 服務,實力碾壓的話,會有許多花哨的輔助工具出現。B - 一個工具。C - 沒有工具。

發展歷史

一個 Star 10K 的庫,如果最早提交是十天前,就算不是刷的也最好也不要用,因為不知道哪天作者就不再維護了。

歷史越悠久的庫使用風險越小,除非它所在的面被淘汰(技術棧、生態、編程語言等等)。

評分:A - 4 年以上歷史,有權威認證。B - 1-4 年曆史,已經有不少人使用過了。C - 作者自己都沒用過就安利你用到線上去。

團隊

看誰是這個庫背後的男人。大公司廣泛使用的開源庫,並且有一定國際影響力,而且大廠也有成功開源歷史經驗的話,就會增加說服力。

但 Vue 就是個例外,幾乎憑尤大一人之力打造,對這種情況,筆者想說的是,一個真心熱愛技術並踐行全職維護的人,也許比一個背著 KPI 的團隊維護副產品更靠譜。

評分:A - 一線大廠,品質權威認證。B - 中型團隊維護,並且有清晰的分工記錄。C - 工作之餘順便開源出去,就沒打算對這個庫負責。

相容性

除了瀏覽器相容性,庫 API 的相容性也非常重要。當你很容易聯繫到作者,並且改動 API 的建議被很快採納時,你就要小心了。

React Router 3 -> 4 升級帶來的陣痛大家都有體會過,babel7 放棄 stage 0-4 也帶來不少吐槽,Angular1 和 Angular2 的區分直接讓很多人粉轉黑了。雖然許多時候頻繁的更新是為了增添新功能,但如果帶來 API 相容問題,反而會招來反感。

假如你們團隊維護的 10 年間,因為某個庫作者非常勤奮的更新導致以時間為維度,均勻分佈了數十種不同的版本,你會發誓下一個項目不再使用這個庫了。

評分:A - 總是能相容升級,實在不行就提前警告並告知在某個版本會廢棄,並提供遷移工具,比如 React。B - 有 Break Change 但是文檔把升級改動寫的很清楚。C - 突然到來的小版本升級讓你不得不重構之前的調用代碼。

趨勢

炒作也好,討論也好,保持大家對這個庫的新鮮關註非常重要,因為這能連帶的讓這個庫做好上面說的很多點。

但註意過分的炒作,可能會降低這個庫的穩定性,畢竟在用戶爆髮式增長之前,最好有一部分當小白鼠。

評分:A - 是 HackNews 的明星話題,Star 成千上萬,各種會議以此為名(Vue conf,React conf)。B - 幾百 Star,有一些討論。C - 別看現在 Star 少,遲早有一天我會超過那啥那啥。

搬家成本

這個是作者補充的比較重要的一天:如果哪天不用這個庫了,換成別的成本有多大?

這方面測試庫做的很好,很多主流測試庫比如 Jest、Ava、Mocha、Jasmine 等之間都有互轉的腳本,業界基本達成了一些共識和規範。

比較坑的是 React、Vue、Angluar,使用之後你基本就被綁定了,至今沒有誰可以無縫做各大框架的遷移。當然 JS 的年齡還很短,而且說不好未來還會被新語言、技術、容器顛覆而成為歷史,標準化不是做不到而是需要時間,也許就在十幾年之後,但是今天就是做不到。

3 總結

下次技術選型討論時,可以拿出規則一條一條比對了!

然後技術選型只是基礎庫,利用這些基礎可以維護好自己的開源庫,把更多時間用在創造業務價值上。

仔細思考就會發現,程式員開發的工具庫也適合點線面體的概念。一個庫 react-button 就是一個點,而它所在的線 react 如果被人拋棄了,無數個 react-xxx 也會翻船。而 react、vue、angluar 這些線都在 js 引擎這個面上,當可以用 C# 寫 WebAssembly 時,Reason、Blazor、Dart 就會逐漸成為瀏覽器的主角,react 之類的庫統統要回爐打造。而當未來人機互聯不需要瀏覽器作為媒介時,js 引擎這個面依附的體 - 人機交互場景也被打翻了,這一浪又會引起多大的變化。

所以技術選型是為瞭解決當下業務問題,仔細考慮好幾個因素,適合解決業務場景就足夠了。

4 更多討論

討論地址是:精讀《12 個評估 JS 庫你需要關心的事》 · Issue #104 · dt-fe/weekly

如果你想參與討論,請點擊這裡,每周都有新的主題,周末或周一發佈。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 列表視圖 為實現各種排列組合類的視圖(包括但不限於Spinner、ListView、GridView等等),Android提供了五花八門的適配器用於組裝某個規格的數據,常見的適配器有:數組適配器ArrayAdapter、簡單適配器SimpleAdapter、基本適配器BaseAdapter、翻頁適配 ...
  • 本文主要介紹Flutter佈局中的Padding、Align以及Center控制項,詳細介紹了其佈局行為以及使用場景,並對源碼進行了分析。 ...
  • 在函數內部,有兩個特殊的對象:arguments和this。 1、arguments arguments是一個類數組對象。包含著傳入函數中的所有參數。但這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。 經典案例:階乘函數 定義階乘函數一般都要用到遞 ...
  • 6-2 css樣式的優點 為什麼使用css樣式來設置網頁的外觀樣式呢?右邊編輯器是一段文字,我們想把“超酷的互聯網”、“服務及時貼心”、“有趣易學”這三個短語的文本顏色設置為紅色,這時就 可以通過設置樣式來設置,而且只需要編寫一條css樣式語句。 第一步:把這三個短語用<span></span>括起 ...
  • 最近阿裡正式開源的BizCharts圖表庫基於React技術棧,各個圖表項皆採用了組件的形式,貼近React的使用特點。同時BizCharts基於G2進行封裝,Bizcharts也繼承了G2相關特性。公司目前統一使用的是ECharts圖表庫,下文將對3種圖表庫進行分析比對。 BizCharts 文檔 ...
  • 前言 JS基於原型的‘類’,一直被轉行前端的碼僚們大呼驚奇,但接近傳統模式使用class關鍵字定義的出現,卻使得一些前端同行深感遺憾而紛紛留言:“還我獨特的JS”、“凈搞些沒實質的東西”、“自己沒有類還非要往別家的類上靠”,甚至是“已轉行”等等。有情緒很正常,畢竟新知識意味著更多時間與精力的開銷,又 ...
  • ```const open$ = new Subject(); const ws = webSocket({ url: 'wss://echo.websocket.org', openObserver: open$ }); // 訂閱打開事件 open$.subscribe(() => {});``... ...
  • web基礎筆記 1.首行縮進:text-indent 單位有兩種:em 字元 、 px 像素 2.字母間距或文字間距:letter-spacing 單詞間距:word-spacing 3.margin 兩個問題: (1) 當大盒子里放小盒子,給小盒子加margin-top時,小盒子會帶著大盒子一起向 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...