逆向思維:如何判斷一套JS框架不符合實際需求?
譯文JS框架稱得上層出不窮,幾乎每周都有新的框架與廣大用戶見面。在今天的文章中,我們將立足于逆向思維,考慮如何斷定一套JS框架不符合實際需求。作為一名JavaScript架構(gòu)師、培訓人員及導師,我經(jīng)常面對這樣一個問題——你最喜歡的框架是什么?或者哪款框架最為出色?而我給出的兩個答案往往令提問者感到意外。就目前而言,我個人最偏好的框架是React JS。但如果要為企業(yè)選擇一套框架,我給出的答案則是Angular 2.0。
不過大家更應(yīng)該問的恐怕是“為什么要準備兩個答案?”或者更進一步探究,“我們該如何完成框架的選擇過程?”下面,我將向大家共享一些使用框架的實際感受。為了公平起見,首先聊聊我個人的一點選擇傾向。
我個人更偏愛以下幾套框架:
- React JS
- Angular 2
- Angular 1
- Ext JS 5或者6
- Ext JS 4
而如果要為大型企業(yè)推薦框架,那么答案會稍有不同:
- Angular 2
- Angular 1
- Ext JS 5 或者6
- React
- Ext JS 4
考慮到這些前提,下面我們具體思考接下來的問題。
由誰來使用框架?
在我所效力的企業(yè)當中,大多數(shù)員工都屬于Java程序員。這意味著JavaScript及其各類衍生版本都能夠為大家所快速熟悉及掌握。然而盡管各框架之間存在相當程度的共性,但也仍有不少差異需要強調(diào)。目前,Ext或者Angular 2的發(fā)展勢頭可能更好,這是因為它們能夠以更貼近Java或者C#的方式產(chǎn)生效果,從而吸引更多相關(guān)開發(fā)者的加入。
學習曲線是否陡峭?
那么在前面提到的框架中,其各自需要耗費多少時間進行學習?要找到答案,我們還需要考慮以下幾個問題:
- 能否購買支持服務(wù)以解答技術(shù)疑問?
- 說明文檔是否清晰明確?
- 框架流行程度如何?
- 團隊中是否已經(jīng)擁有相關(guān)專家?
- 這套框架是否擁有公開Slack頻道?
- 框架開發(fā)者們是否關(guān)注企業(yè)客戶的需求?
說到這里,Ext JS與Angular 2的優(yōu)勢應(yīng)該已經(jīng)顯現(xiàn)出來了,而這也正是我總結(jié)個人最愛的兩個選項的具體方式。
框架是否提供良好的約束機制?
我還記得當初VB 1.0剛剛面世時,每個人都興奮地高呼“看看它的構(gòu)建與運行速度有多快”,并以此作為選擇的理由。
沒錯,VB允許大家采取任何能夠達到目標的代碼編寫方式。但歷史經(jīng)驗告訴我們,只要框架本身仍然提供部分結(jié)構(gòu),那么用戶仍有可能編寫出糟糕的代碼,而且這類蹩腳成果的比例與框架所提供的結(jié)構(gòu)量存在正相關(guān)。
在與多位開發(fā)者合作時,有些人可能要求其他成員重視代碼結(jié)構(gòu)而不只是“能跑就行”。
立足于這一問題,Angular 2再次脫穎而出,而Ext則處于墊底位置。盡管Ext提供所謂MVC及MVVM機制,但其無法保證開發(fā)者編寫的代碼成果與其設(shè)計模式相匹配。在MVC當中,我甚至不確定編寫者是否清楚自己在開發(fā)些什么東西。
行業(yè)標準
為了讓Ext的運作效果更貼近桌面開發(fā)環(huán)境,其能夠生成HTML并利用其布局機制控制各元素在屏幕上的顯示位置。前面提到的其它框架皆全部利用CSS實現(xiàn)布局控制。Ext的優(yōu)勢在于,我不需要了解HTML或者CSS即可實現(xiàn)理想的顯示效果。但弊端則是,如果我希望嘗試一些Ext支持能力之外的效果,則將面臨巨大障礙。另外,使用HTML與CSS則會讓屏幕渲染時長大幅增加,特別是在組件存在三層以上嵌套的情況下。
另外,Ext利用特殊的類定義機制讓JavaScript看起來更像是Java及C#。這不禁令人擔心,隨著ECMAScript標準的演進與其自有類似機制的推出,Ext選擇的作法未來還是否能夠得到廣泛支持。
Ext還采用專門的構(gòu)建流程。雖然這能夠規(guī)避構(gòu)建中的大部分阻礙,但大家可能會問,“為什么不采用gulp、grunt或者npm腳本之類的標準?”
盡管Angular 2主要使用TypeScript,但Angular 2與Ext間的區(qū)別在于:1)盡管強烈推薦,但大家并不一定需要使用TypeScript;2)TypeScript只負責實現(xiàn)部分功能,且實際效果與ECMAScript標準類似。因此,Angular 2的發(fā)展前景明顯要更為光明。
在這方面,另一款值得關(guān)注的框架為React JS。其應(yīng)用構(gòu)建流程全部采用行業(yè)標準,但這款單元測試框架并不允許大家在測試中使用Karma。
可測試性如何?
毫無疑問,我個人要求全部框架都具備單元測試能力,因此Ext JS 4直接被淘汰出局。大家可能會強調(diào),MVC能夠用于測試控制器,但這是MVC的功能而非由Ext自身實現(xiàn)。
在另一方面,React的測試能力最出色,這也是我支持它的原因所在。但我認為它仍然不太適合由企業(yè)客戶選擇,因為其學習周期太長而且說明文檔不太完善。
調(diào)研工作
好了,到這里各原則性問題已經(jīng)相當明確,但問題在于我們要如何提前做好準備?大多數(shù)具體信息往往要在員工實際使用某套框架后才會出現(xiàn)。
最好的辦法就是聽聽框架老用戶們的意見。在測試框架中,我的起步工作就是“我能在互聯(lián)網(wǎng)上找到多少與該框架相關(guān)的信息?”而第二個問題則是,“該框架流行程度如何?”最后,我會聯(lián)系這款框架的反對者,聽聽他們對其做出的負面評價。
如何判斷一套框架不符合實際需求?
現(xiàn)在說回標題——要想選出一套錯誤的框架,大家應(yīng)當聽信銷售人員的忽悠、別問任何問題,同時忽略一切之前提到的考量因素。
然后為自己的沖動懊悔不已……
原文標題:How Not to Choose a Framework
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】