前端可选的框架很多,这背后的缘故原由是什么?为什么会发展到现在这种局势?这么多的框架,总让开发职员感到十分迷茫,应该如何做出选择呢?在未来,前端框架会如何发展?
老司机简介
钟钦成,花名司徒正美,现任去哪儿网前端架构师,开源框架avalon的作者。阅读多种措辞与设计模式,精通DOM与JS各种黑邪术,精通选择器引擎、模块加载器、MVVM。曾在盛大创新院与海内许多有名专家共事,并在那里敲下了avalon的第一行代码,写下了《JavaScript框架设计》一书。热爱动漫,能读写日语,热爱分享,已写下近千篇博文。

>>>> 请您先容一下自己目前的事情职责,卖力的项目情形。听说您是写小说出身的,能否大略先容一下自己的事情经历?为什么选择进入前端领域?为什么对前端框架抱有极大的激情亲切?
钟钦成:现在我在去哪儿网任前端架构师一职,带领大家搞React开拓。React,特殊是React Native是现时最好的移动框架。而公司的重点也转移到移动端了,因此我们小组卖力将移动审察干设置全部搭建起来,各种坑踩一遍,努力成为业务线最坚实的支撑。
每个人的经历都很弯曲,尤其是前端职员,更是龙蛇混杂。许多人都是以为前端比较随意马虎学,或者赢利比较多,才进入这行业。而我比较幸运,由于敲代码也是我大学生活中的乐趣之一。因此不会像其他人,会涌现动力不敷的情形。当然我的兴趣还是蛮多的,比如写小说,建筑,考古,日语,动画,看科幻小说,手办,陶艺,等等。会找乐子的人,不会轻易灰心。
总的来说,我的兴趣都有个特点,便是短缺与他人的互动。敲代码也一样,一个人悄悄地敲就好了。像PM,须要与别人不断沟通,我可能做不过来。每个人的性情都不一样,因此选择行业要合符自己的性情。
至于为什么进入前端,纯粹是有时。我的某个弟弟是干这行的。我在小县城呆着赚不了几个钱,他说带我去深圳见识见识,便一下子先容到他公司做前端了。我在小县城时也用前端方面的知识来接些小活过日子,因此不会以为一下子跳跃太大。更主要的是,我特殊能写,在我没进这行时,就写了三百多篇有关前真个博文,那时大家都以为我已经在大公司任职了。
出于这样的误解,公司一开始就把一些很主要的事我做。而我得担保代码质量,由于我的组件将会被许多人复用。从那时起,我就一贯搞框架,搞组件,搞各种工具。
>>>>请您跟大家讲一下前端框架的发展历史,前端框架的起源和发展如何?现在的前端框架很多,其背后的缘故原由是什么?海内的前端框架又是若何起步的,发展现状如何?钟钦成:这是一个旧调重弹的话题,基本每本JavaScript书都会聊一下这段痛楚的历史。紧张缘故原由是JavaScript没有自己的SDK(核心库),须要依赖民间的力量补救自己。
最开始是一些大公司有能力开拓这些框架,如Prototype.js,是作为ROR的次要项目开拓出来的。此外还有Dojo,Closure、YUI这样恐龙级的框架,也是大公司搞的。后来溘然涌现了jQuery这样由天才开拓的框架。
事实证明,大公司那一套管理办法,以KPI驱动的框架有着致命的缺憾,虽然面面俱到,但不能迅速接管社区的新东西,利用起来不足方便灵巧。它们在jQuery这种瑞士刀前,一下子就解体了。
再后来,大家都知道,前端框架是jQuery的天下,大家都争先恐后地为它做插件。jQuery也大大解放了生产力,让我们有韶光去做一些更故意义的事。在后jQuery时期,最故意义的两件事是RequireJS与Node.js的出身。
前者试图办理JavaScript模块化问题,后者让我们能从后端那里抢走一些活儿。而那些活儿本来便是前端做比较得当,比如说做模板,套模板,传数据,JavaScript的语法检测,风格检测,理点,等等。
这段韶光,又产生了像Backbone这样的MVC框架。但旋即被Knockout,Angular,React等MVVM框架占去份额了。要知道,后端从MVC进化到MVVM,用了大概十年韶光,而前端则不到2年。前端框架发展太迅猛了!
我想这迅猛发展的背后,最大的动力便是需求!
源源不断的需求!
原来由后端做的活儿,放在前端做更得当更快,用户体验更好。这是时势使然,挡也挡不住。
目前海内的发展进程实在与国外千篇一律。最开始是公司牵头,后来就呈现大量出色的个人项目。阿里的前端技能之以是这么强,是由于他们不断地研制自己的轮子,轮子会越造越好。那些绝不重复造轮子的人默默无名,而框架作者们则首创自己一片天地了。
中国拥有天下上最弘大的互联网市场,我们的框架也终极走出国门(比如我的avalon,在澳大利亚,德首都有人在用,又如百度的ECharts,这个也非常抢眼)。
>>>>avalon的起源与发展是如何的?avalon 2的架构如何?采取这样的架构有什么好处?与其他框架比较,avalon更加“接地气”的点表示在哪些地方?钟钦成:avalon当初只是我另一个早期的框架mass Framework的一个插件。mass Framework类似于jQuery与Prototypejs的结合体。没什么特色,被理没也是一定的。但我说过,轮子会越造越好的。当我将这个插件先容到博客园——海内一个非常著名的.net社区,反响很不错。于是我把它独立出来搞。经由5年的发展,它逐渐拥有自己的论坛与社区。
不过,由于年纪大了,我也开始抗拒一些新东西(比如说社区上一些自动化工具,总是想自己全部实现),导致avalon一度发展缓慢。avalon 1.5试图奋起直追,效果不明显。avalon 2决定利用一个更吸引眼球的东西旋转局势,这便是虚拟DOM,以期能够带来性能上的飞跃。
MVVM虽然非常方便,但很随意马虎涌现性能瓶颈。出自于谷歌之手的Angular,也有2000指令之轭(即一个页面超过2000个指令,页面更新就慢得令人发指)。FaceBook的React带来了“虚拟DOM”这个新观点,利用轻量工具来代替重型工具来承担绝大多数的页面重绘事情,办理了所谓的“性能墙”问题。
原来MVVM架构是分三层,M,V,VM三层,我们只须要关注于VM。VM 通过各种手段得知外界对它的操作 ,然后它智能地关照M与V进行变更。VM承受太多职责,导致不堪重负。而虚拟DOM的导入,让avalon2拥有4层架构。虚拟DOM位于V与VM之间,繁芜的视图打算由虚拟DOM打算好, 然后diff出差异点实现最小化刷新。这是算法的伟大胜利。为了实现虚拟DOM,前端框架作者也打仗编译事理等博识东西了。
现在主流的MVVM也结合虚拟DOM进行性能优化。基本上它们是基于Object.defineProperty这个PI。而这个API 在IE8中有BUG,只能用于IE9+ 。因此它们的兼容性都比较差。而avalon的上风在于其作者精通各种兼容性问题与黑邪术。
在IE6-8下,我找到了VBScript实现对VM的自省机制,在较新的浏览器利用Object.defineProperty,在更新锐的浏览器,则利用Proxy(动态代理)这个划时期的东西,从此我们可以动态监听工具是否被添加删除了某个属性,或调用了某个方法,而不像Object.defineProperty只能监听读写操作。(Proxy 工具被用于定义自定义基本操作的行为(如属性查找、分配、列举、函数调用等),在Firefox的定义中有一共有14个属性。)
从这个先容来看,avalon是走在时期的前列,但它不忘初心,还连续支持IE6,让大家用MVVM或虚拟DOM时没有后顾之忧。并且大家也不用担心avalon为了兼容IE6,会变得非常冗长。由于avalon是一份源码编译出好几个版本,每个版本根据浏览器的支持程度合并对应的模板。如果只想运行于IE10,其体积会相称少的。
>>>>在选择前端框架时,大家的建议很多,例如结合自己的业务等。您也曾提到,选择前端框架应综合考虑框架本身与团队情形。要考虑的点这么多,究竟若何来综合考虑呢?详细的步骤该当是若何的?钟钦成:的确如此,技能本来是为业务做事的,纯挚玩技能是没有出息,也找不到方向。前端框架之以是这么多,也是由于大家的业务侧重点也各不相同。选择得当的框架,比选择一个时髦的框架主要多了。千万别让部下自行决定。他们玩不转可以拍拍屁股走人,留下一个烂摊子给后人。我见过说一个公司,先后引进了Angular,vue,React三个框架了,结果他却跑了。
我们要考虑到业务的可持续性,代码的可交卸性及团队的普遍接管能力。比如一个公司,没有前端,都是后端顺手做前真个活,早期许多公司都是招PHP实现前端通吃的。他们的设计模式比较好,可以上手Angular。如果一个团队新人够多,不稳定,则只能用jQuery与bootstrap。
如果是一个创业公司,急着做出原型来拉投资,可以考试测验vue,avalon,React等短平快的框架。但我所说的还是核心框架,涉及到图表,UI库,则更多选择。这些须要架构师见多识广,自己趟过坑,才让团队集中过河。
>>>>有人说前端编程标准和方法逐渐涌现稳定的趋势,您怎么看待这一不雅观点?在之后的发展过程中,有没有可能标准完备统一?有没有可能某个前端框架一统江湖?钟钦成:这个不雅观点前半段是对的。像jQuery带来一系列便捷的操作DOM的办法,append,prepend,remove等方法已经在DOM4中实现了。其最著名的选择器引擎,也有了原生替代品。由于浏览器商之间也存在竞争关系,他们当然将一些公认的好东西内置了,以谄媚用户。
但每个浏览器商是没怎么商量沟通,W3C给出的规范也是足够暗昧客气,因此涌现差异是在所难免的。因此不要相信浏览器,要利用框架! 至于框架,由于文人相轻等缘故,框架之战是不会停息的,好的框架会不断呈现,它们可能以某个神奇的设计一下推翻前朝的统治。就像jquery灭掉prototype,gulp灭掉grunt,webpack灭掉browserfy,React灭掉Angular……
钟钦成:这个问题比较笼统,我也只能笼统地回答。就像你问怎么挣大钱,有许多东西,人家说出来你也不能复制。
首先,根本很主要。如科班出来的人,搞前端就很易上手。可见算法与数据构造的威力。
其次是设计模式,这是JAVA十多年积累的精华,是我们构建巨型工程的威器。现在前端框架也动不动上万行了。像过去那样,全是方法+全局变量在堆砌,在生产环境中找BUG是噩梦。
末了是好好看高手们的框架,阅读源码是进步最快的办法之一。只有看了足够多的源码,你才能博采众长,出奇制胜。末了,便是宣扬与测试了。宣扬确保你拥有第一批用户,成为你连续掩护与升级的动力。须要供应一系列便捷的下载渠道,npm、bower、component、cdn,由于酒喷鼻香还巷子深 。测试是确保你能留住用户。目前社区上产出大量的测试工具,你可以将它们全部绑定在webpack,在用户build工程时,把所有测试跑一遍。
末了说坑,实在没什么坑,所有浏览器兼容性问题与技能难点外国人都供应现成方案。但如果你做出框架,不再掩护,对利用者来说这才是巨坑。便是你不想掩护了,就要找一个接盘侠来主持。就像jQuery,Node.js等著名项目,原作者早早交给他人掩护,现在还活着。
本文系前端之巅原创首发,未经授权回绝转载。
ID:frontshow