前端發(fā)展的這幾年
O'Reilly Media、Battelle和MediaLive在2004年10月引導(dǎo)了第一個(gè)Web 2.0大會邀杏,web2.0時(shí)代開啟贫奠,Blog,Wiki望蜡,RSS各種個(gè)人網(wǎng)站開始登陸大家的視野唤崭,同時(shí),豆瓣脖律,天涯這些符合2.0時(shí)代的產(chǎn)物開始在國內(nèi)大行其道谢肾。我們有了第一波注重Web前端的軟件開發(fā)師,同一時(shí)刻小泉,米國誕生了FaceBook具有跨時(shí)代的產(chǎn)物芦疏,05年,校內(nèi)網(wǎng)出現(xiàn)微姊,前端們開始活躍起來了酸茴,06年8月,Jquery的第一個(gè)版本發(fā)布兢交。
之后的幾年間薪捍,前端基本都是圍繞著各種類庫如Mootools,Underscored配喳,Prototype酪穿,Dojo,Jquery 晴裹,YUI開發(fā)頁面被济。各大類庫也是相互吸收優(yōu)點(diǎn),不斷完善自身涧团,但是本質(zhì)沒有太多變化只磷。
智能手機(jī)開始普及,移動端大浪潮流勢不可擋泌绣,web前端們開始為了移動端開發(fā)各種類庫了Sencha Touch喳瓣,Zepto.js,JQ Mobile赞别,HTML5概念火熱了起來畏陕,各種網(wǎng)頁小游戲?qū)映霾桓F,和Flash的爭斗也到了水火不容的地步仿滔,Twitter也推出了Bootstrap這個(gè)引領(lǐng)風(fēng)騷的CSS工具包惠毁。
隨著系統(tǒng)硬件的提升犹芹,V8引擎性能的提升,整個(gè)網(wǎng)頁的性能極大提高鞠绰,大家開始紛紛開發(fā)出復(fù)雜的Web頁面來腰埂,這種需求開始催生了前端們對開發(fā)的工程化思考,首當(dāng)其沖的就是模塊化加載的問題蜈膨,AMD屿笼、CMD、UMD登上舞臺翁巍,起衍生的產(chǎn)物Seajs驴一,requirejs開始劃分地盤。
這個(gè)時(shí)代還是服務(wù)端渲染為王的時(shí)代灶壶,包括很多模塊或者組件上的拼接都是在服務(wù)端完成的肝断,但同時(shí)也開啟jquery + requirejs + template開發(fā)復(fù)雜頁面的模式。(這個(gè)時(shí)間段驰凛,出現(xiàn)了重構(gòu)工程師和JS工程師的劃分胸懈。)
2012年之后,隨著W3C規(guī)范和標(biāo)準(zhǔn)進(jìn)一步推動恰响,大家對Web頁面復(fù)雜度進(jìn)一步的加劇趣钱,人們不在滿足于Jquery面條時(shí)的開發(fā),出現(xiàn)了許多用于簡化客戶端開發(fā)的框架胚宦,諸如Backbone首有,Ember,AngularJS间唉,Vue,Alavon利术,Knockout呈野,React等等各種各樣的MV*框架。
這是一個(gè)群雄割據(jù)的時(shí)代印叁,如此多的框架涌出被冒,每個(gè)開發(fā)者根據(jù)自己的喜好,業(yè)務(wù)的需求選擇著不同框架來完成目標(biāo)轮蜕。
Node.js開始崛起昨悼,Express,Koa框架開始使用到各種生產(chǎn)項(xiàng)目中跃洛,PM2的服務(wù)管理率触,為企業(yè)解決了監(jiān)控和穩(wěn)定問題,同時(shí)汇竭,阿里開始探索Node.js中間層的開發(fā)道路葱蝗,連續(xù)發(fā)聲穴张,提供前后端分離解決方案。
微信這個(gè)社交龐然大物已然崛起两曼,微信公眾號的玩法皂甘,讓前端崗位開始火熱了起來,也開始帶來了Web和Native的爭端悼凑。
2015年偿枕,F(xiàn)acebook在React.js Conf 2015大會上推出了基于JavaScript的開源框架React Native,一舉將React推上了一個(gè)新的高度户辫,learn once 渐夸,write everywhere。這一年是屬于React的年份寸莫。
同時(shí)捺萌,構(gòu)建工具也在不停的迭代,Grunt的輝煌已去膘茎,Gulp并未在王座上久呆桃纯,Webpack的風(fēng)暴就席卷而來。
2016年披坏,Webpack+ECMAScript6已經(jīng)成為了前端打包構(gòu)建的主流态坦,Vue強(qiáng)勢崛起,Ng2完成發(fā)布棒拂。前端在主流開發(fā)上基本形成了三國時(shí)代(React伞梯,Vue,Ng)帚屉。與此同時(shí)谜诫,移動端也形成了以混合開發(fā)為主的方式,Native嵌入Webview頁面攻旦。
喜歡Vue的原因
個(gè)人評價(jià)喻旷,Vue兼具 Angular 和 React 的優(yōu)點(diǎn),并剔除它們的缺點(diǎn)牢屋。Vue 和 React 均使用 Virtual DOM且预,提供了響應(yīng)式(Reactive)和組件化(Composable)的視圖組件。在性能方面烙无,Vue較優(yōu)于React锋谐。 React 學(xué)習(xí)曲線陡峭。
本人曾基于Angular1.*截酷,搭建了一套小框架涮拗。
1 實(shí)現(xiàn)頁面嵌套路由;
2 考慮多人同時(shí)開發(fā),使得多個(gè)controller.js多搀,配合路由按需加載歧蕉,提升頁面響應(yīng)速度;
3 添加$http(Angular 實(shí)現(xiàn)http請求的服務(wù))全局?jǐn)r截器康铭,方便對http請求進(jìn)行統(tǒng)一管理惯退;
4 方便使用,寫了幾個(gè)service 和 factory从藤。
5 自定義了幾個(gè)常用的管理系統(tǒng)UI催跪,由 Angular 指令實(shí)現(xiàn)。
完成以上5各部分夷野,也算是對 Angular1.* 有了基本的了解懊蒸,也發(fā)現(xiàn)了一些缺點(diǎn),
1 service悯搔、factory和provider 區(qū)別并不明確骑丸,在實(shí)現(xiàn)功能上,可以互相代替妒貌;
2 組件化只能依賴于指令通危,指令與組件化概念不清,并且指令間通訊不便灌曙,跨controller之間的通訊更不舒服菊碟。
3 頁面響應(yīng)速度優(yōu)于Jquery,但是并不理想在刺。Angular 的 watcher 越來越多時(shí)會變得越來越慢逆害,因?yàn)樽饔糜騼?nèi)的每一次變化,所有 watcher 都要重新計(jì)算蚣驼。并且魄幕,如果一些 watcher觸發(fā)另一個(gè)更新,臟檢查循環(huán)(digest cycle)可能要運(yùn)行多次颖杏。
Angular2.0雖然已然發(fā)布纯陨,但是相對于1.0來說,基本上是推翻重寫输玷,完全是兩個(gè)框架了队丝。在語言上使用Typescript靡馁,再加上API的設(shè)計(jì)欲鹏,使得學(xué)習(xí)曲線十分的陡峭,所以沒有深入去了解臭墨。
說了太多其他框架的缺點(diǎn)赔嚎,說說對Vue2.0實(shí)際使用評價(jià)。
1 輕量級框架,沒有任何依賴尤误。
2 API設(shè)計(jì)很清晰侠畔,簡單易學(xué),但凡使用過Angular1.*,上手Vue2.0相當(dāng)容易损晤。
3 Vue中指令和組件分得更清晰软棺。指令只封裝 DOM 操作,而組件代表一個(gè)自給自足的獨(dú)立單元 優(yōu)雅的組件化設(shè)計(jì)尤勋,組件間溝通簡單方便喘落。
4 生命周期明確,修復(fù)了 Vue 1.0 部分情況下生命周期鉤子并不能調(diào)用等問題最冰。
5 PC端和移動端均十分適用瘦棋。配合Vuex,非超大型應(yīng)用暖哨,均不會出現(xiàn)力不從心的現(xiàn)象赌朋。
6 Vue社區(qū)也迅速壯大,太多的第三方組件篇裁,方便完善你的項(xiàng)目沛慢。
總結(jié)
隨著web技術(shù)的飛速發(fā)展,對頁面效果和頁面功能的要求也越來越多茴恰。雖然jQuery可以使你非常方便的操作DOM颠焦,但是已經(jīng)越來越不能滿足當(dāng)前的需求。一套優(yōu)雅的前端框架往枣,是前端工程師的福音伐庭。
網(wǎng)絡(luò)上一句話,“自從使用了Vue分冈,我可以正常下班了” 圾另。足以說明,Vue的優(yōu)雅和便捷雕沉。