前言:那些年我们追过的框架

一、江湖初开,刀耕火种

二十一世纪初的互联网江湖,还是一片混沌初开的景象。那时的前端,与其说是一门手艺,不如说是一场与浏览器的肉搏战。我们这些最早踏入江湖的“切图仔”,手里握着的不过是HTML 4.01、CSS 2.0和几行原生JavaScript,便敢自称“网页制作”。

没有框架的日子里,每个页面都是一场硬仗。我们手动拼接DOM,用document.getElementById一遍遍寻找元素;我们小心翼翼地处理事件,在IE的attachEvent和标准的addEventListener之间反复横跳;我们写下的每一行CSS,都要在IE 6、IE 7、Firefox和刚出生的Chrome之间反复测试,只为求得那一点点可怜的兼容性。

那时的江湖,简单,却也粗粝。一个alert()弹窗就能让我们欣喜半天,一个能兼容IE 6的圆角CSS Hack就值得在论坛里开帖炫耀。我们像一群手工艺人,一砖一瓦地搭建着互联网世界的雏形,虽然效率低下,虽然满是补丁,但每一行代码都带着泥土的芬芳和手工的温度。

二、jQuery时代,一统江湖

然后,2006年,他来了。

约翰·雷西格带着他的jQuery,像一道闪电劈开了混沌的前端江湖。$()这个神奇的符号,从此成为了无数前端开发者的信仰。

“Write Less, Do More”——这句口号像魔咒一样席卷了整个社区。突然之间,复杂的DOM操作变得优雅简单,浏览器兼容这个令人头疼的巨魔被jQuery轻松驯服。链式调用如诗般流畅,动画效果信手拈来,Ajax请求不再令人畏惧。

我还记得第一次在项目中引入jQuery时的震撼。原本需要几十行代码才能实现的选项卡切换,现在只需要几行简洁的语句。原本在各个浏览器中表现不一的事件处理,现在统一而稳定。jQuery插件生态如雨后春笋般涌现——轮播图、日期选择器、模态框、表单验证……几乎任何你能想到的功能,都能找到一个现成的插件。

那是jQuery的黄金时代,也是前端江湖第一次有了“武林盟主”。无论大厂小厂,无论电商门户还是管理系统,jQuery几乎成了标配。面试题里必然有jQuery源码解析,技术博客里充斥着jQuery最佳实践,GitHub上星星最多的项目前十名里,jQuery长期占据一席之地。

但盛极必衰,是江湖不变的铁律。

三、框架混战,百家争鸣

随着Web应用越来越复杂,单靠jQuery这把“瑞士军刀”已经力不从心。2010年后,江湖进入了群雄并起的战国时代。

Backbone.js率先吹响了MVC的号角,让前端第一次有了“架构”的概念。AngularJS横空出世,用声明式编程和双向数据绑定惊艳了世人,“大而全”的框架理念让它迅速在企业级市场占据一席之地。Ember.js高举“约定优于配置”的大旗,吸引了一批追求开发效率的信徒。

而真正改变游戏规则的,是2013年Facebook开源的React。

React带来的不仅是虚拟DOM和高效的渲染性能,更是一种全新的编程范式——组件化。JSX语法虽然初看怪异,却让模板和逻辑前所未有地紧密结合起来。函数式编程的思想开始渗透进前端开发的血液里。

紧接着,2014年,尤雨溪发布了Vue.js。这个“渐进式框架”像一股清流,以更温和的学习曲线、更灵活的采用策略,迅速在中小型项目和初学者中流行开来。“简单易上手,却又能应对复杂应用”——Vue找到了那个微妙的平衡点。

那几年,江湖上每天都在上演着“框架之战”。React派和Vue派在论坛里激烈辩论,Angular在2.0的断崖式更新中艰难转型。每个新项目启动前,技术选型会都能开成辩论赛:“我们用React吧,生态繁荣!”“不,Vue更适合我们团队!”“Angular的企业级支持更好!”

我们像追星一样追着这些框架的版本更新,熬夜阅读每一篇发布日志,在项目中急切地尝试每一个新特性——Hooks、Composition API、Suspense、Teleport……生怕落后于时代。

四、工具链的军备竞赛

框架之争尚未平息,工具链的军备竞赛又悄然打响。

Webpack从一个小小的模块打包工具,逐渐演变成配置复杂如天书的构建系统。“Webpack配置工程师”成了江湖上的新工种。Gulp、Grunt、Parcel、Rollup、Vite……打包工具你方唱罢我登场,每个都承诺更快的速度、更简单的配置、更好的开发体验。

状态管理库也成了必争之地。Redux带着Flux架构和不可变数据的思想席卷React生态,虽然样板代码多得让人头疼,但清晰的数据流让复杂应用变得可控。Vuex、MobX、Recoil、Zustand……每个状态管理方案都在试图解决同样的问题:如何优雅地管理日益复杂的应用状态。

TypeScript从微软的实验室走出,逐渐成为大型项目的标配。“AnyScript”的调侃声还在耳边,类型安全带来的代码智能提示和错误预防已经让无数开发者真香。ESLint、Prettier让代码风格统一从道德约束变成了工程规范。

我们在这套日益复杂的工具链中挣扎、学习、适应。package.json文件越来越长,node_modules文件夹越来越大,启动项目时终端里滚动的日志越来越眼花缭乱。有时候我会怀念jQuery时代,一个<script>标签引入就能开始编码的简单日子。

但回不去了。江湖已经进化,我们只能跟着进化。

五、追框架,还是在追什么?

十年回首,我常常在想:我们追的真的是框架吗?

我们追的,其实是那个不想被时代抛弃的自己。在这个技术迭代以月为单位的前端江湖,停下学习就意味着淘汰。每个新框架的出现,都像一面镜子,照出我们知识体系中的空白。

我们追的,是解决实际问题的更好方案。当项目从简单的展示页变成复杂的单页应用,当用户从几千变成几百万,当团队从一个人变成几十人——我们需要更强大的工具来应对这些挑战。框架的演进,本质上是软件开发复杂度演进的外在表现。

我们追的,也是一种社区认同感。当全世界的前端开发者都在讨论React Hooks时,如果你还一无所知,那种被隔离在对话之外的孤独感是真实的。参与技术讨论,贡献开源代码,在框架生态中留下自己的痕迹——这是数字时代手工艺人的骄傲。

但追着追着,我们也开始反思。

是不是陷入了“为了用新技术而用新技术”的陷阱?是不是在追逐潮流时,忘记了解决业务问题这个根本目的?是不是把框架的版本号当成了技术能力的度量衡?

那些最优秀的开发者,最终都超越了框架。他们理解框架背后的设计思想——组件化、响应式、函数式、不可变性。他们能在不同框架间自如切换,因为他们掌握的是编程的本质,而不是某个框架的API。

六、归来仍是手艺人

如今,前端江湖又站在了新的十字路口。

低代码平台承诺让开发变得更简单,AI编程助手开始编写我们的日常代码,Web3、元宇宙、边缘计算……新概念层出不穷。框架的迭代速度丝毫没有减慢,React 18、Vue 3、Svelte、Solid.js,每个都在探索前端开发的未来形态。

但当我深夜调试代码,当我在设计模式中寻找最优解,当我为团队设计可维护的架构时,我越来越清晰地意识到:

框架会过时,工具会更新,但解决问题的智慧不会。写出清晰可读的代码的能力不会。设计可扩展架构的眼光不会。持续学习、保持好奇的心态不会。

那些年我们追过的框架,就像武侠小说中高手们用过的兵器。初入江湖时,得到一把好剑能让我们战力大增。但真正成为高手后,飞花摘叶皆可伤人,无剑胜有剑。

我们追框架,最终是为了有一天不再被框架所困。

我们学习工具,最终是为了有一天能创造工具。

这十年,我们从切图仔成长为架构师,从追框架的人成长为定框架的人。下一个十年,前端江湖又会怎样风起云涌?我不知道。

但我知道的是,无论框架如何变迁,浏览器如何演进,那颗想要用代码创造价值的心,永远不会变。

那些年我们追过的框架,追的是技术,也是青春。

而前方,还有更多的框架等着我们去追,去用,去超越。

江湖路远,代码为伴,诸君共勉。