我曾两次被问到同一个问题:前端框架存在的意义/前端框架解决的是什么问题。当时回答得都不太好,现在再组织一下语言写一下。

作为个人项目和我公司及其外包项目的主程,Vanilla.js的信仰者,人肉优化的实践者,我一向坚持自己进行DOM操作。我给公司项目写的图表表格,基本都是零外部依赖的代码。这些特殊应用,有性能追求,框架的效率绝对比不上手工优化的代码。

不过,我专注的场景,应该只是前端1%方向,剩下的99%,都是些拉数显示、CRUD的页面。这样的场景下,框架的确很流行。各类框架诞生后,已经把jQuery这样底层的库给淘汰。伴随框架而来的MVC、MVP、MVVM概念,的确是前端开发的新武器。各类框架基本上都会要求定义与显示相关数据,和用于生成DOM结构的模版,和事件处理。然后框架们基本都能按数据变化,自动执行模版渲染,将数据同步到页面。另一方面,用户在页面交互产生的事件,都能自动或者半自动反映到状态数据来。可以看出,前端开发工作中比较多的问题,是数据和页面显示的同步。如果不使用任何辅助的库的话,需要更新一个显示数据,需要先在DOM🌲找到对应的节点再进行修改;再者在表单中,需要获知数据值的变化,也需要监听事件。这也就是当年jQuery这类辅助DOM操作的库得以流行的原因。

从操作DOM的开发模式到使用框架的转变,对应的是编程范式从命令式编程到声明式编程变化。究竟是框架的诞生引领了这种变化,还是新的编程范式流行导致了框架的诞生?跳出这个先有鸡还是先有蛋的问题,回顾前端开发的历史,伴随着网络的升级和终端计算能力的提升,越来越多任务放在了用户端一侧,前端应用的体积越来越大,前端开发的工作量也是伴随着上升。刚才提到,前端页面存在的意义,是数据显示和用户交互。面对计划列表里越来越多需要完成的页面,重复使用底层API操作DOM的开发方式,效率挺低的。“懒惰”s是程序员的美德,比起使用详细的命令去一步一步得到结果,大家需要的是能自动将数据反映到页面上的工具,这个工具就是现在的框架。

有人会宣传框架比起各种jQuery的各种优势,但从用户角度/从产品角度/从业务角度来时,才不关心前端们代码怎样写,PM需要的是“明天上线”。何不承认,框架的意义,是解决越来越长的需求列表和前端们希望六点下班的矛盾🙃。

顺便看看近几年来几个有名的框架的热度变化,基本是此消彼长的变化趋势。