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