转自:http://www.iteye.com/news/30547css
前端框架不断推新,众多IT企业都面临着“如何选择框架”,“是否须要再造轮子”的抉择。去哪儿网前端架构师司徒正美分析了各主流行框架优劣点、适用场景,并针对不一样规模的公司、项目给出了相应的前端技术选择方案。
最近几年,前端技术迅猛发展,差很少每一年都会冒出一款主流的框架。 每次新开业务线或启动新项目时,首先第一件事就是纠结:使用什么框架,重造什么轮子?我很高兴应CSDN的邀请谈个人见解。
RequireJS,前端技术发展分水岭
在五六年前,移动端尚未兴起,咱们没有什么选择,就是jQuery。有人会说,jQuery只是类库,不是框架;但那时前端业务尚未像今天这么繁重,本来是后端干的事,所有挪到前端来,由于光是jQuery就能够包打天下。jQuery不够用,还有成千上万的jQuery的插件呢。因而问题就是这样一一衍生出来了,一个页面太多jQuery插件了,请求数太多了,因而咱们得打包。打包须要咱们对插件有规划。因而这一需求在社区上逐渐造成了某些 规则,其中最出名的是AMD规范,体现上RequireJS这个加载库上。
RequireJS是前端技术发展上的一个分水岭。JavaScript在ES6以前一直没有本身的加载机制,RequireJS的出现意味着前端能够向更大规模发展。之后我说的技术选型,一个很是重要的甄选点, 便是否存在加载器机制或符合某个模块规范。
选择前端框架应综合考虑框架自己与团队状况
回到原来的话题,选择框架要从两面看,一是看该框架的本领,二是看大家团队的能耐。
从框架的角度来看, 它的功能丰富不丰富、社区活跃度如何、国内社区活跃度如何(有的在国外流行,但国内只有初创公司或一些大公司的边缘项目在试水)、文档齐全与否、是否及时 更新、测试覆盖率如何、上手难易度如何,都是咱们考量点。不过能进咱们视野内的外国框架,基本是身经百战,在造轮子兴盛的世界闯出来的领头羊。 jQuery、Angular、KnockOut、Emberjs、Polymer、React、Backbone、Zepto,咱们基本是围绕在这几个 上面转了。固然还有更大型的东西,如EXT、 YUI、Dojo、EasyUI、Bootstrap,这是UI库层面的。
下面是2012年外国对当时流行12个JavasScript MVC框架的纯技术评估:html
显然,咱们第一步就是圈定时下最流行的框架与库做为评估对象,而后再根据自家公司的状况进行筛选。贵公司是建站公司,仍是有本身产品的公司呢?若是是建站公司,页面不会复杂到哪里去,基本上jQuery+Bootstrap搞定,不要想得太多,就是它们。若是有本身产品, 要维护一大堆客户数据,要与客户打交道,不难想象存在很是复杂的CRM系统,按照中国人的特性,这东西只会愈来愈复杂,这就要慎重考虑了。这每每是持续十年的维护升级,咱们须要看一下某框架是否有大家的产品那么长寿,这框架的升级更新是否频繁平缓。
大工程应尽可能避开谷歌产品
若是你的项目是一个跨度三年以上的大工程,用《人月神话》的术语来讲,90%就是个焦油坑。咱们须要使用更稳健成熟的技术方案,咱们须要重点避开谷歌的产品,它的许多产品都是玩票性质,GWT、Closure、Darty就是前车可鉴。Polymer基于许多新技术构建,其中Object.observe()、 Custom Elements、HTML Imports、Shadow DOM、Model-Driven Views还远远没被标准化, 许多仍是独家的,变数太大,所以才出现下图所示的悲剧。 Angular不是我黑它,这东西也喜欢断崖式升级,它在1.08时兼容IE6-8,1.2时须要打补丁兼容旧式IE,1.3摒弃了对旧式IE的兼容,直 接在源码中删除了全部兼容代码,所以全部补丁方案都无力回天,而且不支持全局Ctrl函数,许多模块须要独立引用,1.4不向下支持动画模块,2.0由 at改为ts构建,因为使用Object.observe(),所以不支持IE6-11,Chrome30……前端
后台系统可考虑EXT、EasyUI,avalon等国内优秀框架也值得考虑
若是大家的产品是后台系统,那么就有两个选择,使用EXT、EasyUI这些重大的UI库方案,其中EXT具备严重的排它性,它很难与其余前端解决方案并用。什么模块组织、打包、数据可视化,它都已经能所有帮你搞定。它文档齐备漂亮,入门难度中等,但它要求你的团队很是稳定,如今招一个专职EXT 的前端是很难的。EasyUI是国内比较大牌的UI框架,虽然闭源,不过想扩展它不是难事。
此外,国内的淘宝Kissy, 网易Nej也不错。还有更轻量的方案:MVVM。MVVM最擅长作这些重交互的产品。举例说,为了对应复杂交互的Gird,jQuery社区开发出各类庞大巨物DataGrid、jqGrid、FlexiGrid,还不如MVVM几个循环绑定来得干脆利落,扩展性又好。目前,KnockOut、 Emberjs、Angular与我写的avalon就是这一类框架。Angular虽然有点坑,但若是你是从1.3用起,而且不鸟IE,它仍是一个不错的选择,其活跃的社区为它带来无限的可能。KnockOut在.Net人群中很是流行,微软出品,前端MVVM框架的鼻祖,不过它须要对后端数据进行过多的加工,由于它自己是不支持对套嵌对象的绑定。Emberjs没有一个好干爹,但有一个好亲爹,做者Yehuda Katz是jQuery, Rails、SprouteCore、Merb、Handlebars这些著名框架的核心成员,虎父无犬子,Emberjs如今仍是国外的第二大MVVM 框架。avalon是比较适合国情的MVVM,有它专门兼容IE6的版本,易上手,性能高,视频教程多,出了问题能够抓得着做者,是它的几大卖点。
重SEO产品,可考虑jQuery+Bootstrap+RequireJS组合
若是大家的产品是商场这样重演示类的产品,就对SEO有要求,MVVM就不适合了。目前也就Angular与avalon在搞后端渲染机制,但还不上了台面。这时jQuery+Bootstrap+RequireJS就很是好用。RequireJS的做用不仅仅是提供了一个按需加载机制,它还能让咱们组织起更为庞大的代码。若是不用RequireJS,国内另外一个选择是SeaJS,它的规范是CMD。此外还有CommonJS规范,但这没法直接运行于前端,须要借助fekit、FIS、Webpack这样的构建工具进行合并了。无论怎么说,你这时选用的框架必须存在AMD、CMD或 CommonJS任一种加载规范,这方便你之后的横向扩展。至于插件,目前小插件们都趋向用UMD,它可让AMD、CMD、CommonJS任一种加载 器加载。
移动端技术较混乱,需多管齐下
若是大家的产品是移动端,基本上是SPA架构了,由于这会减小等待,整页刷新与请求数。目前该领域很是混乱,不一样于PC端,要兼容的浏览器多出N 倍,而且为了性能,浏览器商乱砍功能或改变一些浏览器特性的行为,每每引起一些奇怪的BUG,目前社区正在整理这些坑与解药。但目前没有一个框架可以摆平全部问题,都须要多管齐下。个人看法是:
RequireJS(按需加载,移动端上能够不打包,善用304缓存,腾讯搞出一个更牛叉的增量更新加载器MT,也能够试试)+Backbone(组织代码与路由管理)+Zepto(轻量DOM操做) + fastclick.js(点击穿透与延迟处理)+Hammer.js(各类触屏事件)+iScroll5.js(滚动条处 理)+Animate.css(CSS3动画)+Enquire.js(处理响应式布局)。
可见移动端每一个部件都烂到蕊了,每一个部件都须要专门的工具进行修复。移动端是很是注重体验的,每个小角落都存在着各类动画,但浏览器或自带的 WebView都不好劲,因而Native与Hybird的话题才一直这么火。有的人说,既然DOM最吃性能,那么就干脆用Canvas来代替吧(请 见:http://zhuanlan.zhihu.com/FrontendMagazine/19967854 与http://www.ruanyifeng.com/blog/2015/02/future-of-dom.html )。Facebook也推出了本身相似的方案React Native,本身实现了一套GUI,不过编写语言是JavaScript。它是使用本身原来的超高性能轮子React实现的。这或者是一条道路。但优缺点也明显,正如Angular浓浓的Java风,React是在逻辑中插入大段标签语言(JSX)。同时React的排它性也很是强,很难与其它库搭配使 用。同时,咱们能够看到,出自jQuery名门的jQuery Mobile并无入围,那个性能太糟了,连Sencha Touch也不及。上面说的只是核心库, 尚未搬出UI库呢。号称Mobile First的UI库不在少数,因为无视IE,能够大胆使用CSS3。目前比较出彩的有Foundation、Semantic,Refill、 Ratchet。若是只是想运行在平板上,性能问题就不会那么拮据了,咱们还能够试试inoic、Sencha Touch, Kendo UI Mobile……
没有最好,选择最适合本身的
基本上,针对每一个平台,我都列出一些主流框架,但不意味着大家都能驾驭得住。小马过马,老牛没过膝,松鼠淹个半死,就是这么回事。创业公司喜欢新框架,这与他们拿得起高薪招一两个前端牛人所致,基本上全部页面就是他们干的,所以用Angular或Ember都没区别。小公司则当心,人员流失 大,jQuery+RequireJS是万金油。大公司则基本上有本身的技术沉淀,换言之,应该有本身的前端框架,除非那东西很陈旧,不建议再造轮子。对大公司的建议是搞本身的技术委员会,根据本身的人员配置来挑选的框架。有句话说得好,不求最好,但求最合适。有些框架就属于牛逼人手里牛逼闪闪,二逼人手里一团乱麻。对于某些成长特别快的中等公司来讲,这点最需防范,牛人是有的,但做战的主体70%都是刚培训出来的实习生,难上手,中文文档不全的框架就必 须过滤掉。我也不排除造轮子的可能性,毕竟有些公司就是人才辈出,能推出一些靠谱的开源产品来造福社区。
但不管咱们选择什么框架或决定本身动手造轮子,都勿忘初心,技术必须让咱们工做生活更为轻松愉快——咱们只选择咱们能驾驭住的框架,咱们不能保证它在一年后是否会过期落后,但至少不会变成绊脚石。套用亚当·斯密的话(税收是一种必要的恶)来讲,框架是一种必要的恶,它是强约束的,所以必须慎重选择。后端