[杂谈] 关于前端技术的选择Mon Sep 11 2017

至2017年,Javascript从一门不受人关注的脚本语言到世界上最流行的编程的语言,得益于Web技术的蓬勃发展,互联网给人们的生活带来的极大的改变。 近年来,各种框架层出不穷,无数创业公司追赶新潮,React, Angular, Vue,Express,Koa... 然而,却一个接一个的倒下了。 多年前火爆一时的Nodejs,如今论坛人去楼空,整天都是招聘信息,广告,个人demo,干货越来越少,甚至连Express,Koa的作者TJ也弃坑叛变跑去搞Go了,顿感凄凉。

此文 非常理性直击痛点反应黑暗面, 分析前端技术选型问题, 欢迎不同的观点和声音,就当是抛砖引玉。


开发模式的改变

我从2014年起刚开是接触前端,那时候便有开始关注Angular, React了,但是一直是保持观望模式。直到2016年年底我才开始真正深入React, 原因:

  1. 从以往C,C++的经验来看,我认为框架还不够稳定
  2. Angular 依赖注入,脏值检测,其实都是高级语言玩剩下的,没什么好好奇的
  3. 当时很少关注上层开发

在我看来,一个框架,只要不是本质上改变了开发模式,其实没什么用,用它和不用它区别不大。 所以这也是为什么 React,Angular, Backbone 之类的框架能够火起来的原因,因为它们有一个共同的特点,那就是从本质上,改变了前端的开发模式,React通过引入JSX拼装视图的方式更是一场历史性的革命。

什么是开发模式的改变 ? 当年一站到底的jQuery,遍布逻辑的ajax,对html字符串做加法,这就是当年的开发模式。 经历过的人知道,这种开发模式的问题在于,数据层面和视图层面都深度的耦合了。当代码量越来越大,耦合度也越来越高,自然而然很多这种项目到了后期就变得越来越难维护 ,甚至,只能到重构的地步。

jQuery简化了以往的DOM操作方式,通过链式调用的方式,真正的做到了它描述的那样 "write less, do more"

Backbone数据层面和视图层面解耦,通过模块化的方式,将model,view, route 分开,从而减少了维护成本,也将MVC的思想带到了前端.

Angular的出现则是为了更好的对Backbone进行了补刀, 数据视图双向绑定,脏值检测,自动更新视图,指令式操作,不再需要手动,当然一切看起来是很美好,很新颖(2012年的时候).

React则显得更加聪明一些,前面的框架都想告诉你,你就用我一个就好了,用到底,而React则是只专注视图,而且做的很纯粹,并且能够很好的和其他框架进行配合, 不像某些仿造框架,封装了一堆的语法糖。

它们同样改变的了文件的布局,发布方式,写起来更加舒服,减少重复劳动,最重要的是真正意义上从逻辑层面解耦,使得项目后期变得容易维护不少(假设使用者水平都很高)



根据实际场景,选择对的技术,而不是选择新的

这一年也混混论坛,看看团队博客。发现,很多人选技术,只选新的,不选对的。当然

  • 见过那种用Vue把一个电商网站做成SPA,完全不考虑兼容性,最终倒闭的公司。
  • 也见过用Angular 1 无法迁移高版本的Angular 2+的,只能Angular到底,跳不出坑急着招人填坑的公司。
  • 也见过项目陈旧,多批人维护,已经改不动,到迫不得已 全员加班加点重构的公司。

前端界的浮躁,可能只是一些人的阴谋而已,我不用,但是我安利你用。 或者是找存在感, 可能是因为上层开发难度不够底层来,所以作为脚本小子的我们需要更多的“技能”让自己发光。



不仅仅是选择了框架,也选择了生态

为什么一个框架出来的时候我不会马上去使用? 其实是生态问题,社区问题,当然,如果是个人项目,做第一个躺坑的人没问题,但如果是像淘宝,天猫这种大项目,想想还是算了吧。可供你借鉴,供你参考,供你查找问题的资料太少,当然如果这个框架你从思维上是认可它的,也不妨一试。

就生态来说当然没有框架能比的过jQuery,毕竟10几年的沉淀,世界上90%网站的选择,丰富的组件生态,简单直观的调用方式。后续会有其他讨论。

这一点上,淘宝就做的非常好,React被炒作的那么火爆, 淘宝前端的Leader也只允许在购物车上用了一下,说明Kissy其实已经能够很好的解决目前的问题了,而仔细分析,购物车的场景也很适合用React来写, 不盲目跟风,这样不但是对下属负责,也是对公司负责的一种表现。



一个框架的设计的成不成功,只要看它是不是经常删,换,增API就行了

一个框架频繁的变动接口,变化调用方式,删除API,会让开发者极其痛苦。这样会导致:

  • 框架升级时需要修改大量的代码
  • 每次升级都需要完整测试
  • 旧插件的兼容性问题
  • 破坏整个社区生态

人都是趋利避害的动物,jQuery之所以至今屹立不倒也是它设计成功的最好证明,为什么? jQuery 10几年的历史,同时代的框架,Dojo,YUI,Motools, Prototype 都死了, 它却好好的活到了现在。jQuery 每一次的新版本发布,都做到了绝对稳定,API鲜少变化。最重要的是, 它能够平滑升级,从低版本的jQuery,迁移到高版本几乎毫无成本

但是你看看Angular? 当很多人还在为怎么从Angular1的坑中跳出来的问题烦恼时,Angular已经要发布5了? 怎么办? 当然,坑还是要填,砖还是要搬,饭还是要吃。



国内前端界 = 娱乐圈 ?

比如Seajs,弃坑不维护了,当年为了KPI也是吹的爆炸,比如作者原话:"RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug"。哈哈, 当然,我现在想问一句:“那些入坑的人,现在还好么??”

令我如此费解的是,RequireJS哪来的BUG啊? 国外Linkdin 不是用的好好嘛。。按需加载一定会比 全加载后一次执行要慢吗 ? 别人吹水不需要成本,别人安利只需要敲敲键盘就可以了,当然最后要填坑的人还是你自己啊。

又比如NodeJS,当初也是吹的上天了,Express 一个前端搞定全栈,如今这些公司只能疯狂找人填坑,论坛也是人去楼空, 只剩下广告,招聘,填坑的人还苦苦的爬不出来只能奔走个各大论坛发问题求答案。 然而像是网易这种大公司,则是懂得巧妙的利用Node的特性做了游戏服务器, 当然,现在也有很多公司开始偷偷转Go了。不信?不信你去搜搜招聘啊。