jQuery的意义在我看来和他自己说的主要是两点:一是更好的API,二是兼容。这两点JQ做到了极致,在上一个时代,这两点恰好是前端最痛的两个点,所以它成功了。

不过到了移动时代,一是web平台的api有了大幅度演进,又有es6的新特性,这些新的API,我认为设计水平是远远超过JQ的。而移动端的兼容问题更加复杂,JQ所创造的shiv方式,是没办法照顾到移动端的适配需求的,比如说单单屏幕适配这一条,就这么复杂:

近年有一点好现象,就是前端逐渐开始有人重视架构这件事了,Angular(指1代)在我看来最大的特色是directive对html语法的扩展能力和MVVM架构,MVVM微软的架构师2005年搞出来的,至今在UI架构方面,我还没有见到超过这个的架构,但是Angular的问题也很明显,一是它很重,二是 directive离了angular,就完全没法复用。

后面就是React了,React(泛指)有意思的东西很多:React Native, GraphQL ,jsx,UI组件化,flux。其实每一样都很有想象空间。有让我很兴奋的,比如RN和GraphQL (虽然两者的实现都糟透了)分别代表了向客户端和服务端的延伸,也有让我觉得完全是垃圾的,比如flux,我认为只是把所有的耦合中间用类似事件的形式弄到了dispatcher上,完全是自欺欺人。总的来说,我觉得这个体系蕴含了各种nb的思想,但有点过于封闭,fb想要的太多,其实每一点都没做透,没一点都让我觉得我思想特别好,但是实际用的话都问题多多,最后变成只能吸收下思想自己搞一套了。另外React跟MVVM半毛钱关系都没有,它既没有绑定的概念,又没有命令的概念。

最后讲小右的Vue,它是非常纯粹的一个MVVM的实现,用前端比较熟悉的事件代替了命令,实现了双向绑定。这里面有些实现细节,比如Model所有的属性变成getter/setter我是有些疑问的,但总体而言,我觉得它就是web端实现MVVM的一个自然的延伸。比起前两者,它是比较轻量的,最重要的是它是单一职责的。

从架构的角度看,前端经历了几个时代,2005-2008左右,复用基本靠ctrl-c ctrl-v,各种特效站满地,重在“能实现”,不问形式;2008-2012,复用是中心化的,各种框架,是把所有需要复用的东西塞到一个文件里,反正pc流量也足 ,最后jQuery胜出 ;2012年到现在,npm发展把复用这件事带上了正轨(虽然夹带了common js的私货),也终于开始有一点真正意义上的UI架构,沿着79年开始的MVC,几年发展过来客户端几十年走过的路。

关于前端架构发展,我的一些看法是:

1. MVVM至今仍是最先进的UI架构,目前各种所谓”创新“,我的评价基本都是“幼稚”

2. 我觉得View层本身的发展没有得到应有的重视,毕竟数据绑定和架构是为了大型应用和开发效率,但是我怀疑现在有哪个公司真正在需要“大型”应用,一个Model展现到多个视图的场景真的很多吗?也可能受业务类型限制,我目前工作中遇到的这种情况,是非常少,甚至多次在客户端更新model的场景都很少。而开发效率嘛,理论上确实好的架构会提升开发效率,但是现在很多公司其实开发效率并没有卡在写代码上……你懂得。

3.  UI组件化势在必行,目前最有希望的是Web component和React组件, directive基本可以出局了。

4. 前端职责的扩展,GraphQL和React Native分别给出了很大的想象空间,但我的直觉是两者似乎都不是最终答案。

总结:变的不一定活,不变的肯定死。