有人把公司首页的“Hello,World”重做了一遍,删掉脚手架,关掉打包器,只留几行原生 Javascript。页面起得飞快,Lighthouse一跑,几个关键指标就绿了。团队里没人说话,但那一刻大家心里有数:我们可能真的不需要再把每个按钮都交给框架。
这几年,前端像追剧。每一季都换主角,每一个版本都喊“革命”。项目从 React 切到 Vue,再尝试 Svelte,又被下一波“范式”带走。npm 装到硬盘喘不过气,构建流程像工地,动一处就塌半边。框架没有错,错的是我们把它当成万金油,什么都往里塞,连静态页都不肯放过。
风向是从浏览器开始变的。过去你要自己造轮子,现在轮子摆在那里,拿就完了。Fetch 成了标配,ES 模块不再是实验,Web Components 的自定义元素、Shadow DOM、模板都齐活。以前我们绕着各种状态库转,现在用一个事件、一个订阅就能稳稳地跑。更细一点,IntersectionObserver 做懒加载,View Transitions 直接做页面切换动画,Navigation API 管导航,URLPattern 写路由,连 Node 和 Deno、Bun 也把 ESM 和 fetch内置了。你不靠框架,也能把事做成。
大家为什么愿意折返到原生?不只是意识形态,是性能把人逼回来了。移动端上,卡半秒就是掉人;搜索那边,Core Web Vitals盯着你的页面快慢,动作迟了,排名挪位。这么多年的经验最靠谱的优化不是再添一个“性能库”,而是少发点脚本,少跑点逻辑。原生 Javascript没有包袱,拿来就用,启动速度干净,渲染没绕路,调试更直白。你省下来的每一小点,其实都在留住一个用户。
如果把这叫“无框架区”,也别把它想成是打倒谁。企业里复杂的业务、几十号人协作、跨团队标准、长期维护,框架当然还会占主场。变化只在边界:落地页、管理后台里的某些模块、短平快的内嵌工具,越来越多团队选择不搭大棚。不是反叛,是把事情讲清楚——什么时候需要重量级,一开始就说,不要靠惯性把所有东西都按一个套路做。
有意思的是,推动这事的,竟然是 AI。以前我们为了一点样板代码,去找脚手架、翻文档;现在丢给助手,几秒钟就把事件、节流、防抖、简单状态写好。语法越直接,它越少犯错。框架里的约定和魔法,反而让人类和模型都容易迷路。要做个响应式的 UI?要监听滚动、打点、替换节点?一句清楚的提示,出来的就是原生实现。那句老话“框架节省时间”,在许多日常场景里开始不成立。更狠的是,用 AI拆旧代码,也比人肉快。你给它标清楚组件职责,它能一段段把框架组件换成自定义元素,把复杂依赖换成浏览器 API,留下一套更扁平的结构。
项目怎么拆才不乱?过去流行“大单体”。现在大家宁愿走微前端思路:小块 UI 独立加载,模块之间用约定通信,互相不搅。团队和安全也更认这个方向,像集装箱那样装得明白。原生做这些很顺手,不用搞一棵巨大的依赖树,不用统一在同一个构建系统下。你要推一个更新,只对某块做 ESM 模块替换,其他部分不动。甚至你可以把 import maps 配好,浏览器自己认路径,省下不少路径魔法。
很多人心里还有一个愿望:把“构建”这一步直接砍掉。Vite 和 esbuild已经把等待压到很低,但终点在更前面。ES 模块和浏览器的原生导入能力,让“直接上线”的想象不再是笑谈。编辑器保存,浏览器刷新,脚本就是脚本,不需要先变成另一种脚本再打包成一个包。轻量在这里不是口号,是你真的能少做事。
有人担心回原生是不是倒退。2026年的原生项目,和十年前那种“手搓一切”的原生不是一个东西。你该用什么就用什么,不多不少。WebAssembly、Workers、Service Worker、缓存策略、边缘计算——这些都能和原生配合。关键不在于“用不用框架”,而是“你为什么用它”。在一个讲究手感和控制的时代,能摸得清楚的方案就是优势。
还有一个隐性的变化,教育开始把秤砣压回基础。训练营重新教语言本身、网络基础、浏览器模型,课上少了“记这个钩子”,多了“拆这个问题”。团队里能自己算数据流的人变多了,不是只会套状态库。你看那种海量依赖的项目,能少一半人力,很多其实是因为大家把问题想明白了——不是再往上加层,而是沿着底层往下走一步。
框架也在变。不是退出舞台,而是变成选项。React在推服务端组件,把运行时拿回去,Vue强调渐进式,Svelte继续压掉运行时体积,Astro搞“岛屿”,大家都朝着“少发 JS、互操作、能插拔”的方向。Chrome团队喊“baseline”,各家浏览器靠拢标准,Interop做的一致性比以前好多。生态围着通用能力聚集,而不是围着某家独门语法转。你用不用某个框架,是为了你的规模和场景,不是为了赶“最新”。
这一波回原生不是情怀,也不是否定谁。是一次把“基础”拉回舞台的调音。这么多年,我们被抽象的糖衣喂得太多,忘了原理的味道。现在发现,语言本身不差,浏览器本身不弱,AI把重复劳动拿走,我们终于能把注意力放回“解决问题”。你不必记某个库的黑话,能记住的是 Javascript 的语义、事件的机制、渲染的路径。这些东西不会因为 GitHub明天的趋势榜就突然失效。
有人说“那就都用原生吧”。别这么绝对。大项目、复杂协作,框架仍然是好工具。只是我们不再把它当药方,哪儿疼都往上贴。原生是一块底板,框架是一层加固,用与不用,是一个清楚的选择,不是一个信仰。
值得记住的只有:先做少,再做对。能不发的脚本不发,能用的标准先用,能省的构建就省。五年以后,这些代码还在跑、还看得懂,这比任何潮流都值钱。

