查看原文
其他

尤雨溪深夜官宣:Vue 3 将不再支持 IE11

IT服务圈儿 2022-09-11

作者丨典典 发自 思否编辑部

来源丨SegmentFault 思否报道 公众号SegmentFault


早在开发之初,尤雨溪便计划在 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 Proxies 实现更高性能和更完整的响应式系统,而在 IE11 中无法 polyfill 这些特性。这是主要的拦路虎,因为这意味着 Vue 3 要想支持 IE11,基本上需要发布两个行为不同的版本:一个版本使用基于 Proxy 的响应式系统,另一个版本使用类似 Vue 2 的基于 ES5-getter / setter。


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/blob/ie11/active-rfcs/0000-vue3-ie11-support.md#for-those-who-absolutely-need-ie11-support


1、解除网盘下载限制,大文件也无需启动客户端!

2、愚人节失恋,我用Python制作整蛊软件发送给女友,结果...

3、快了,印有祖师爷图灵的钞票要发行了

4、按下电源后的几秒钟,CPU在干嘛?

识别关注我们

了解更多精彩内容

点分享

点点赞

点在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存