点击⬆️方“逆锋起笔”,公众号回复 编程资源
领取大佬们推荐的学习资料
尤雨溪官宣
原因
自Vue 3的开发开始到2018年底,我们一直被要求提供IE11支持。许多用户询问Vue 3是否将支持IE11,我们最初的计划是发布Vue 3并使其稳定,然后添加稍后会支持IE11。
在漫长的开发过程中,我们还就IE11兼容性进行了研究和实验,但是由于所涉及的复杂性和手头上的其他工作量大,因此已将其优先处理。微信搜索公众号 逆锋起笔,关注后回复 编程资源,领取各种经典学习资料。
当我们再看一下2021年的今天的问题时,浏览器和JavaScript的状况已经发生了很大变化。现在,越来越多的开发人员正在使用现代语言功能,更重要的是,Microsoft本身已经开始通过对Edge的投资积极地将用户推离IE。
它还在自己的主要项目(如Microsoft 365)中放弃IE11支持。就在几天前,WordPress还决定放弃对IE11的支持。IE11的全球使用率已降至1%以下。当我们谈论面向公众的网站和应用程序时,IE11呈明显的快速下降趋势。
我们相信这是一个重新思考IE11对Vue 3支持的机会。
对Vue3 中支持 IE11的成本?
行为不一致
Vue 2的反应系统基于ES5 getter / setter。Vue 3利用ES2015代理获得了性能更高且更完整的反应系统,该系统无法在IE11中进行多填充。这是主要障碍,因为这意味着Vue 3要支持IE11,它实际上需要发布两个具有不同行为的不同版本-一个使用基于Proxy的反应系统,另一个使用类似于Vue 2的基于ES5-getter / setter的系统。。
Vue 3的基于代理的反应性系统提供了几乎完整的语言功能覆盖。它能够检测许多在ES5中不可能或不可行的操作,例如属性添加/删除,数组索引和length突变以及in操作员检查。为Vue 3的代理版本编写的相同代码在IE11版本中不起作用。这不仅给我们带来了技术上的复杂性,也给开发人员带来了持续的精神负担。
我们最初的计划是在IE11版本的开发版本中同时交付Proxy和ES5反应性实现。当它在启用代理的开发环境中运行时,它将检测并警告不兼容IE11的用法。从理论上讲,这是可行的,但由于需要将这两种实现混合在一起,并且在开发和生产之间存在行为差异的风险,因此造成了极大的复杂性。
长期维护的负担
支持 IE11 也意味着我们必须考虑在整个代码库中使用的语言特性,并为我们的发布版本找到合适的 poliyfill / 编译策略。
每一个不能在 IE11 中被 polyfill 的新特性都会带来新的行为警告。一旦 Vue 3 承诺支持 IE11,就永远没办法摆脱了,直到下一个大版本。
对于那些实在需要 IE11 支持的人
如果您需要 IE11 支持,我们的建议是使用 Vue 2。与其为 Vue3 和未来的版本承担巨大的技术债,我们相信,把工作重心放在让 Vue2 拥有更多 Vue3 类似的特性更有意义,让两个版本之间的开发体验更相似。
原文地址
- https://github.com/vuejs/rfcs/blob/ie11/active-rfcs/0000-vue3-ie11-support.md
- https://zhuanlan.zhihu.com/p/362000763