早在开发之初,尤雨溪便打算在 Vue 3 公布并稳固后兼容 IE11。现在 Vue 3 ,已公布多时,但 IE11 的寰球使用率却呈显著降落趋势。Vue 3 是否还会针对 IE11 开发兼容版本?

昨日凌晨,尤雨溪在知乎针对上述问题给出了答案:Vue 3 将不再反对 IE11。RFC 具体地从起因、老本、后续保护等方面给出了解释。


以下为 RFC 原文翻译


起因

从 Vue 3 开发开始,始终到 2018 年底,咱们就始终被问及 IE11 反对的问题。

很多用户都问过,Vue 3 是否会反对 IE11,咱们最后的打算是先公布 Vue 3,让它稳定下来,而后再减少对 IE11 的反对。

在漫长的开发过程中,咱们也对 IE11 的兼容性进行了钻研和试验,但较高的复杂度以及手上繁多的工作,让咱们不得不推延它的优先级

当工夫来到 2021 年,咱们从新扫视这个问题时,浏览器和 JavaScript 曾经产生了很大的变动。

越来越多的开发人员开始应用更古代的语言个性,更重要的是,微软本人也开始通过对 Edge 的投资,踊跃推动用户进行对 IE 的应用

微软还在其次要我的项目(如 Microsoft 365)中放弃了对 IE11 的反对

就在几天前,WordPress 也决定放弃对 IE11 的反对

IE11 的寰球使用率曾经降至 1% 以下

当咱们议论面向公众的网站和应用程序时,IE11 正在显著疾速下滑。

曾经到了重新考虑 Vue 3 对 IE11 反对的机会了。


在 Vue 中反对 IE11 的老本

行为不统一

Vue 2 的响应式零碎是基于 ES5 getter / setters 的。

Vue 3 利用 ES2015 Proxy 提供了一个性能更好、更加欠缺的响应式零碎,而 IE11 无奈 polyfill 这些个性。

这是次要的阻碍,因为这意味着 Vue 3 要反对 IE11,它实质上须要公布两个具备不同行为的版本:一个应用基于 Proxy 的响应式零碎,另一个应用相似于  Vue 2 的基于 ES5 getter / setters 的版本。

Vue 3 基于 Proxy 的响应式零碎提供了近乎残缺的语言个性笼罩。

它可能检测到许多在 ES5 中不敢设想的操作,例如属性的增加/删除、数组索引和长度渐变,以及 in 操作符的拦挡。

为 Vue 3 的 Proxy 版本编写的利用必定不能在 IE11 版本中工作。这不仅给咱们带来了技术上的复杂性,也给开发人员带来了继续的精神负担。

咱们最后的打算是在 IE11 版本的开发构建中同时公布 Proxy 和 ES5 的两种响应性版本

当它在反对 Proxy 的开发环境中运行时,会检测并正告不兼容 IE11 的一些用法。实践上可行,然而复杂度微小,因为它须要将两种实现混合在一起,并且有可能导致开发和生产之间的行为差别


长期保护累赘

反对 IE11 也意味着咱们必须思考在整个代码库中应用的语言个性,并为咱们的公布版本找到适合的 poliyfill / 编译策略。

每一个不能在 IE11 中被 polyfill 的新个性都会带来新的行为正告。一旦 Vue 3 承诺反对 IE11,就永远没方法解脱了,直到下一个大版本。


库作者的复杂性

如果 Vue 自身能够齐全笼罩掉这些复杂度,那么肯定水平上咱们还是能够承受的。然而,在与社区成员探讨后,咱们意识到共存的两个响应性实现也不可避免地影响库作者的开发

通过在 Vue 3 中反对 IE11,库作者实质上也须要同样做一些决定。库作者不得不思考他们的库应用的是哪种 Vue 3 版本(可能还反对 Vue 2)。如果他们决定反对 IE11,他们在编写库时,脑子里也必须时刻思考 ES5 响应式零碎的一些缺点。


为 IE11 奉献持久力

没有人想反对 IE11。它是一个死气沉沉的浏览器,停留在过来。Web 生态系统向前倒退得越远,咱们在尝试反对它时,须要填补的缺口就越大。讥刺的是,通过在 Vue 3 中反对 IE11,咱们给了它更多的生命力。思考到咱们的用户根底,放弃对 IE11 的反对可能会让它更快地被淘汰


对于须要 IE11 反对的用户

咱们很分明,对 IE11 的真正需要来自那些没方法做降级的人:金融机构、教育部门和那些依赖 IE11 作为屏幕阅读器的人。如果你正在构建一个针对这些畛域的利用,你可能没有抉择。

如果您须要 IE11 反对,咱们的倡议是应用 Vue 2。与其为 Vue 3 和将来的版本承当微小的技术债,咱们置信,把工作重心放在让 Vue 2 领有更多 Vue 3 相似的个性更有意义,让两个版本之间的开发体验更类似。

一些咱们思考带给 Vue 2.7 的性能:

  • @vue/composition-api plugin 合并进 Vue 2,这会让应用 Composition API 开发的库同时反对 Vue 2 和 Vue 3
  • 单文件组件(SFC)中的 script setup 语法
  • emits 选项
  • 晋升 TypeScript 类型反对
  • 在 Vite 中正式反对 Vue 2 (目前通过非官方插)

注:以上列表是临时的/不详尽的,咱们最初会在独自的 RFC 中探讨/最终确定。

原文链接:
https://github.com/vuejs/rfcs...