随便说说前端三大框架

283 阅读4分钟

说实在,朋友转发了文章,Vue 性能超越 React,突然想写写前端三大框架 React、Vue、Angular(排第四的是 Svelte)

TLNR 先说说结论

个人喜好:

  1. Angular.js 1.x(不是 Angular 2+)
  2. Vue.js
  3. React.js

发展前景:

  1. React.js
  2. Vue.js
  3. Angular

Angular 份额会越来越小

不可否认,最早的 angular 1.x 是划时代的,在前端引入了工程化的 MVC/MVVM 开发模式,js 变量到 dom 元素,自动双向绑定。

特别是 template、scope、directive、service、factory等,启发着一个又一个更好的轮子。

失败的原因:

  1. 太超前,2009 那个年代,当时的生态还不健全,下面相关点工具都没有:
    • webpack 工程化自动化打包(2013年12月20日)
    • babel 语义语法兼容转义(es6/es2015年以后的吧,最开始叫 6to5,顾名思义是 es6 转 es5,但是后来随着 es 标准的演进,有了 es7、es8 等, 6to5 的名字已经不合适了,所以改名为了 babel
    • eslint(Nicholas C. Zakas 2013)
    • 严格的 js 超集/TypeScript 等(2012年10月微软)
    • 全球公共资源库npm(nodejs 2009年诞生,2011/2012年才开始大规模普及)
  2. 从 angular.js(1.x) 升级到 angular(2+),几乎是换了种框架
    • 完全不兼容,语法、工程目录结构等,都变了,流失了大部分用户
    • 更超前的语法等特性,如注解、RxJS 等,对于小前端来说,上手门槛太高了。
  3. 被其他框架替代,江山代有才人出嘛

Vue 不好说

我还是喜欢单个文件组件,包括 模版 + 脚本 + 样式,就是常说的前端页面呈现方式:骨架、皮肤、交互。

没有最火的原因:

  1. 走了太多弯路,2013年12月8号初版,到 Vue 1.x,Vue 2.x 核心代码都没有使用 TypeScript,对于生态圈,也几乎都是 js 来写代码,没有严格类型定义,没法工程化等,一堆问题,为什么当时选用 Flow,而不是 TS 呢?理由有很多,有人说,是个人喜好嘛,毕竟是个人开发者为主,到现在也是,核心程序几乎都是一个人贡献的。
  2. 和 Angular 一样,升级造成的不兼容,例如:
    • v-model 在 1.x/2.x 为 v-bind:input 和 v-on:input 事件 的缩写,
      在 3.x 改成了:v-bind:modelValue 和 v-on:update:modelValue 的缩写,
      兼容一下很难吗?几乎所有生态组件,都要跟着改,完全没道理。
    • vue2 使用 new Vue 创建实例,
      vue3 使用 Vue.createApp 来创建实例,
      做个语法糖,内部让 new Vue 来调用 Vue.createApp 很难吗?
  3. 这次官方升级,从 2.x 到 3.x 正式发布到 npm 几乎用了两年吧?公司很多应用是基于 2.x,升级起来太麻烦了,比如 Vue Apollo GraphQL 到现在还没有发布正式的 Vue 3.x 版本
  4. 在 3.x 的 setup 语法很香,但是后续还会不会特别大的不兼容呢,老产品升级不了,不好说。

可能不对,Vue基本上还是作者一个人在写核心,其他人都是做一做周边,基本上大方向还是他说了算,但是大方向错了呢?没人把控。 一个人走的更快,一群人走的更远。

React 一直做的很好

虽然特别不喜欢 JSX/TSX 这种把 html 当成 js 来写的方法,但是 函数式组件、hooks,实在是太香了。

  1. 兼容性做的真好,几乎每个大版本,尽量做到了前后兼容。
  2. 生态完善,虽然我当年看到 ant-design 3.x 那种复杂的 getFieldDecorator,我都不想搞前端了,简直不是人看的,类似的还有 umi/dva 3 等,设计等简直反人类。现在 ant-design 4.x 好很多了。这个使用体验和 element-ui/element-plus 没法比。

React 一直在更新,2013年首次公开,从 0.x 到 1.14,然后直接 React 15,直到目前的 React 18,都是版本帝,Angular 也 14.0 了。希望越来越好。

最后,总结一下,说实在的,

  1. 性能往往不是衡量我们开发一个框架的首要因素,毕竟业务没有那么复杂嘛;
  2. 核心库的前后升级兼容,很重要,开发团队的稳定性等;
  3. 生态圈,核心库升级后,生态是不是马上能做好适配?就像 element-ui 死掉了,另一波人搞了个新的 element-plus。而 ivue、vue graphql 相关库到现在还没有正式升级 Vue3;
  4. 每一步都要选择正确的道路,就像采用 ts、es6/vite 等,不折腾。

未完待续。。。