如何進(jìn)行前端選型膊夹?

1 寫在開始

技術(shù)迭代是在任何團(tuán)隊都是老生常談的話題衬浑,尤其是在前端技術(shù)發(fā)展迅速的這些年。無論是一幫久經(jīng)沙場的老油條放刨,還是剛畢業(yè)滿懷沖勁兒和憧憬的新兵蛋子工秩,都希望自己能學(xué)到一些跑在生態(tài)第一梯隊的技術(shù),但企業(yè)的技術(shù)并不是求新进统,而需要多個維度去判斷是否合適助币。如何更好的選擇更適合團(tuán)隊的前端庫,成為了一個值得探討的話題螟碎。

本文旨在分享運(yùn)行時相關(guān)庫的主觀看法眉菱,工程化相關(guān)不在此處提及。

請注意:

1掉分、本文中的”庫“是統(tǒng)稱俭缓,泛指可以通過npm倉庫管理的可復(fù)用的前端運(yùn)行時插件,可能指UI組件庫酥郭、單頁框架华坦、CSS庫等等。

這里順便多嘴一句不从,庫是library惜姐,不單指某一類特定代碼的集合,而是開源項目的可復(fù)用產(chǎn)出物的統(tǒng)稱椿息。而框架一般指具有約定的針對某一領(lǐng)域的解決方案歹袁。

2、本文所有的內(nèi)容都為作者基于自己知識體系的主觀表述寝优,如有不同意見宇攻,一定是你對,歡迎交流指正倡勇。

3、本文以作者本人在19年4月整理的angular生態(tài)進(jìn)行UI組件庫選型為例,進(jìn)行流程和指標(biāo)的解釋妻熊,案例時間久遠(yuǎn)夸浅,只幫助內(nèi)容理解,不做選型推薦扔役。

2 流程簡介

干貨開始帆喇,分享一下我的選型流程:

選型步驟.png

流程簡介:

  1. 圈定范圍:根據(jù)環(huán)境因素(團(tuán)隊和行業(yè)的情況)進(jìn)行組件生態(tài)的初步篩選

  2. 確定指標(biāo):確定你所關(guān)心的分析指標(biāo)及對應(yīng)權(quán)重

  3. 數(shù)據(jù)采樣:根據(jù)指標(biāo)對選型范圍內(nèi)的每個“參選者”進(jìn)行數(shù)據(jù)收集

  4. 匯總分析:根據(jù)收集的指標(biāo)數(shù)據(jù)進(jìn)行橫向比較,進(jìn)行整體分析

  5. 選擇結(jié)果且進(jìn)行兼容性檢查

接下來的內(nèi)容會根據(jù)上述流程結(jié)合案例分享亿胸。

3 流程詳述

3.1 圈定范圍

選型的本質(zhì)是比較和篩選坯钦,那么前提是先確定一個相對較小的選型范圍,便于減少后續(xù)分析的工作量侈玄。

那么如何圈定選型范圍婉刀?

3.1.1 信息查找的渠道

我們查找比較新的庫通常會去github或掘金等技術(shù)社區(qū)或者搜索引擎直接搜索,接下來簡單列舉幾個我常用的組件庫查詢途徑:

3.1.2 初步篩選需要考慮的因素

環(huán)境因素.png
3.1.2.1 團(tuán)隊環(huán)境
  • 人員平均技術(shù)能力:在人員平均能力不是特別強(qiáng)的情況下,過于復(fù)雜的庫會增加項目開發(fā)和學(xué)習(xí)的成本潘悼。

  • 人員學(xué)習(xí)能力:如果你選擇的庫的復(fù)雜度遠(yuǎn)遠(yuǎn)超出于你團(tuán)隊人員的學(xué)習(xí)的能力律秃,會需要你進(jìn)行二次研發(fā)或封裝,增加研發(fā)成本治唤。

  • 團(tuán)隊原有的框架積累:不要輕易放棄團(tuán)隊原有的技術(shù)方向上的積累棒动,同方向的技術(shù)迭代會讓你事半功倍。

3.1.2.2 生態(tài)環(huán)境

為什么要考慮生態(tài)的流行度宾添?

你選擇的庫的流行度決定你招人的難易程度船惨,如果你選了一個小眾的框架,大概率需要付出新招的開發(fā)人員的全部學(xué)習(xí)成本辞槐。

庫的流行度也一定程度上說明了相關(guān)生態(tài)的完善和健康度掷漱,用的人多功能就會相對完善,bug解決的時效性也會更好榄檬。

3.1.2.3 行業(yè)線環(huán)境
  • 契合度:舉個例子卜范,我的行業(yè)線使用的是比較復(fù)雜且要求高效的業(yè)務(wù)系統(tǒng),那么有功能強(qiáng)大的table組件所在組件庫就是更適合我行業(yè)線的鹿榜。

  • 運(yùn)行時要求:有些行業(yè)線因為軟件更新要求嚴(yán)格海雪,所以瀏覽器版本落后,可能需要兼容老版本的瀏覽器舱殿。如我19年在組件庫選型時奥裸,支持IE11是必要條件。

3.1.3 我的案例

以下是我根據(jù)當(dāng)時(19年)社區(qū)的流行度和環(huán)境因素圈定的選型范圍:

選型范圍.png

3.2 確定指標(biāo)

3.2.1 指標(biāo)結(jié)構(gòu)

基于自己對生態(tài)的理解沪袭,整理了一份指標(biāo)(累死我了湾宙,手動狗頭),還有很多不完善的地方,僅供參考:

指標(biāo).png

量化方式因為太多了侠鳄,會在第三節(jié)進(jìn)行概括行的分享埠啃,接下來會一一介紹指標(biāo):

3.2.1.1 基礎(chǔ)指標(biāo)
  1. *生命周期階段:簡單看一下即可,無需量化數(shù)據(jù)伟恶,重點在于判斷庫是否處于不穩(wěn)定或無人維護(hù)的狀態(tài)碴开。

    • 是否有release版本:判斷該庫是否處于不穩(wěn)定狀態(tài),通常我們會通過避免使用一個太”新”的庫來規(guī)避技術(shù)風(fēng)險博秫。

    • 官方是否仍有升級計劃:判斷該庫官方是否還持續(xù)投入

    • 最近一次feat或fix的更新時間:或是否聲明即將停止維護(hù)潦牛,判斷該庫是否處于停止維護(hù)狀態(tài)

  2. *社區(qū)活躍度:是最重要的考量標(biāo)準(zhǔn)之一。和買車一樣挡育,銷量高的無論是維修還是保養(yǎng)都便宜巴碗,出小毛病還能容易找到解決方案。

    • google trend的搜索指數(shù):最好從整體和區(qū)域兩個維度分析静盅,庫可能存在地域性良价,比如下圖:vue在中國的搜索指數(shù)遠(yuǎn)遠(yuǎn)高度其他國家。

      vue世界熱度分布.png
    • github的star數(shù)量:一定程度上能說明受歡迎的程度

    • github的issue應(yīng)答率和應(yīng)答速度:是判斷一個庫是否活躍的重要因素

    • github的Pull requests close比例:是判斷一個庫是否活躍且穩(wěn)定的重要因素蒿叠,某些庫在生命的末期或者不活躍后明垢,可能存在缺乏人員維護(hù)的情況,如ant Design的mobile版本市咽、element ui都出現(xiàn)過類似的問題痊银。

    • npm下載數(shù)量和趨勢:能夠很大程度上反應(yīng)一個庫的用戶數(shù)量

    • code的Contributions圖:是判斷一個庫是否活躍的重要因素

  3. 安全可控

    • 是否開源:需要識別一下源碼是否完整

    • 是否有大公司(團(tuán)隊)主導(dǎo):大多數(shù)成功的開源項目都是有一個穩(wěn)定的團(tuán)隊維護(hù),這樣能更好的保證框架的穩(wěn)定和生命力

  4. *功能完善度:是最重要的考量標(biāo)準(zhǔn)之一施绎。

    • 特性覆蓋率:量化方式可參考3.1.2
3.2.1.2 環(huán)境指標(biāo)
  1. *業(yè)務(wù)(行業(yè)線)契合度:是最重要的考量標(biāo)準(zhǔn)之一溯革,可與“功能完善度”一同分析。

    • 重點特性完善度
  2. 運(yùn)行時版本要求

    • 要求的最低支持的瀏覽器/Node版本:量化方式可參考3.1.1
  3. 生態(tài)流行度

    • 同基礎(chǔ)指標(biāo)的社區(qū)活躍度
3.2.1.3 研發(fā)成本
  1. 工程化完善程度

    • 編譯產(chǎn)出物是否支持多方式引入

    • 源碼組織方式(mono-repo還是multi-repo)

  2. 代碼是否有良好的設(shè)計:大型的庫基本可以放心谷醉,良好的設(shè)計會讓代碼擁有更好的可讀性致稀,方便維護(hù)和升級。

    • 是否漸進(jìn)式提供:一個庫優(yōu)秀的public API設(shè)計能力的前提是源碼的清晰的構(gòu)造層次俱尼,這也是代碼擁有更好可讀性的前提抖单。

    • 庫結(jié)構(gòu)的抽象程度:是代碼是否好修改的考量因素之一。

  3. 研發(fā)文檔完善度

    • 是否有貢獻(xiàn)指南

    • 是否有二次開發(fā)文檔

    • 源碼工程中是否有研發(fā)demo:有一個閉環(huán)可驗證的demo是提升研發(fā)效率和研發(fā)質(zhì)量的前提遇八。

    • 源碼工程中是否有完善的測試用例

3.2.1.4 開發(fā)/學(xué)習(xí)成本

也就是使用成本矛绘。

  1. API簡潔程度

    • API面積(個數(shù)):無論是考慮開發(fā)成本還是學(xué)習(xí)成本,單個庫的大面積的API都是災(zāi)難刃永。
  2. *文檔完善度:好的文檔是一個好的開始货矮,也是能節(jié)省推廣成本和降低推廣阻力的途徑之一。

    • 可讀性

    • 是否有源碼示例

    • 是否有可交互DEMO

    • 國際化程度(是否有中文)

    • 是否有歷史文檔

    • 文檔美觀度

3.2.1.5 用戶體驗

一般UI組件庫才需要的衡量指標(biāo)斯够,這塊的知識體系需要一些設(shè)計知識囚玫,如果有時間喧锦,會單獨(dú)寫一篇詳細(xì)展開。

3.3 數(shù)據(jù)采樣

僅舉例部分指標(biāo)的量化方式劫灶,本節(jié)重點展示采樣對比的效果裸违。

3.1 如何量化指標(biāo)(有時間再整理)

3.1.1運(yùn)行時版本要求:
  • 最直接的就是查閱github主頁上的 Browser Support /Environment Support

  • 去官方文檔中查閱

  • ISSUE查找

3.1.2 特性覆蓋率:
  • 目標(biāo)庫的特性(功能/組件)數(shù)量/需求的特性(功能/組件)數(shù)量

3.2 我的案例

3.2.1 搜索指數(shù)
  1. 趨勢對比

    一年內(nèi)的趨勢.png
  2. 流行區(qū)域

    流行區(qū)域.png
3.2.2 項目背景
項目背景.png
3.2.3 社區(qū)活躍度
  1. 社區(qū)支持
社區(qū)支持.png
  1. 貢獻(xiàn)
Contributions.png
3.2.4 功能完善度
功能完善度1.png
功能完善度2.png
3.2.5 重點特性完善度
重點特性完善度.png
3.2.6 二次研發(fā)分析

以material2為例:

material2.png

3.4 匯總分析

3.4.1 客觀分析

客觀分析.png

3.4.2 主觀結(jié)論

主觀結(jié)論.png

3.5 選擇結(jié)果且進(jìn)行兼容性檢查

選型后,記得檢查和你使用其他庫的預(yù)依賴本昏。

4 寫在最后

本文主要是對過去知識體系的梳理和完善,將選型思路根據(jù)自己的知識體系分享出來枪汪,希望能給更多的人提供思路涌穆。

無論是流程還是量化的指標(biāo),都是和我的知識體系緊密聯(lián)系的雀久,所以并不是適合任何情況的選型分析宿稀,僅作為選型分析和庫本身分析的參考。

附錄:系列文章的目錄結(jié)構(gòu)

1赖捌、前言:一點對于前端框架設(shè)計的淺顯思考

2祝沸、前端技術(shù)研發(fā)人員的能力模型

3、如何進(jìn)行前端選型越庇?

4罩锐、如何畫好一個前端框架圖?

5卤唉、如何進(jìn)行前端框架推廣涩惑?

6、關(guān)于開發(fā)人員支撐形態(tài)的見解

7桑驱、如何根據(jù)用戶(開發(fā)人員)反饋進(jìn)行框架優(yōu)化竭恬?

8、前端框架用戶體驗方向的思考

9熬的、專題1:前端自動化解決方案

10痊硕、專題2:前端研發(fā)流程下的權(quán)限控制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市押框,隨后出現(xiàn)的幾起案子岔绸,更是在濱河造成了極大的恐慌,老刑警劉巖强戴,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭螟,死亡現(xiàn)場離奇詭異,居然都是意外死亡骑歹,警方通過查閱死者的電腦和手機(jī)预烙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來道媚,“玉大人扁掸,你說我怎么就攤上這事翘县。” “怎么了谴分?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵锈麸,是天一觀的道長。 經(jīng)常有香客問我牺蹄,道長忘伞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任沙兰,我火速辦了婚禮氓奈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鼎天。我一直安慰自己舀奶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布斋射。 她就那樣靜靜地躺著育勺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罗岖。 梳的紋絲不亂的頭發(fā)上涧至,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音呀闻,去河邊找鬼化借。 笑死,一個胖子當(dāng)著我的面吹牛捡多,可吹牛的內(nèi)容都是我干的蓖康。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼垒手,長吁一口氣:“原來是場噩夢啊……” “哼蒜焊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起科贬,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泳梆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后榜掌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體优妙,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年憎账,在試婚紗的時候發(fā)現(xiàn)自己被綠了套硼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡胞皱,死狀恐怖邪意,靈堂內(nèi)的尸體忽然破棺而出九妈,到底是詐尸還是另有隱情,我是刑警寧澤雾鬼,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布萌朱,位于F島的核電站,受9級特大地震影響策菜,放射性物質(zhì)發(fā)生泄漏晶疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一又憨、第九天 我趴在偏房一處隱蔽的房頂上張望冒晰。 院中可真熱鬧,春花似錦竟块、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埠况,卻和暖如春耸携,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辕翰。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工夺衍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喜命。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓沟沙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壁榕。 傳聞我的和親對象是個殘疾皇子矛紫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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