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