早在开发之初,尤雨溪便打算在 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…