共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。
前言
之前尤雨溪曾说过,Vue3 将会出一个 IE11 的兼容版本,当初 Vue3.0 都曾经公布很久了,却迟迟不见兼容版本的呈现,原来是因为微软踊跃的推动自家的 新 Edge 浏览器
,并打算放弃 IE,这让尤雨溪同学感觉兼容 IE 是否还有必要,来看看他的知乎:
译文
从 Vue3
开始开发的时候始终到 2018 年底,咱们始终被问到无关 IE11
的反对。许多用户都在问 Vue3
是否会反对 IE11
,咱们最后的打算是先公布 Vue3
的稳定版,而后稍后才会反对 IE11
。在漫长的开发过程中,咱们还就 IE11
的兼容性进行了钻研和试验,然而因为所波及的复杂性和手头上的其余的大量工作,因而 IE11
就先临时放了一放。
当咱们再看一下 2021 年的当初的问题时,浏览器和 JavaScript
的情况曾经产生了很大变动。当初,越来越多的开发人员正在应用古代语言性能,更重要的是,微软自身曾经开始通过对 Edge
的推广,踊跃地将用户推离 IE
。甚至还在本人的次要我的项目 (如Microsoft 365
) 中放弃对 IE11
的反对。就在几天前,WordPress
也决定了放弃对 IE11
的反对。IE11
的寰球使用率已降至 1%
以下。当咱们议论面向公众的网站和应用程序时,IE11 呈显著的疾速降落趋势。
咱们置信这是一个从新思考 Vue3
对 IE11
反对的机会。
在 Vue 3 中反对 IE11 的老本
行为不统一
Vue2
的响应式零碎是基于 ES5
的 getter / setter
。Vue3
利用 ES6
的 Proxy
取得了性能更高且更残缺的响应式零碎,但 Proxy
却无奈在 IE11
中进行 polyfill
。这是最大的阻碍,因为这意味着如果 Vue3
要反对 IE11,它实际上须要公布两个具备不同行为的不同版本:一个是基于 Proxy
的响应式零碎,而另一个则应用相似于 Vue2
的基于 ES5
的 getter / setter
的零碎。
Vue3
基于 Proxy
的响应式零碎提供了简直残缺的语言性能笼罩。它可能检测许多在 ES5
中不可能或不可行的操作,例如属性的增加、删除、数组索引和 length 渐变以及 in 操作符的查看等性能。为 Vue3
的 Proxy
版本编写的雷同代码在 IE11
版本中基本不起作用。这不仅给咱们带来了技术上的复杂性,也给开发人员带来了继续的精神负担。
咱们最后的打算是在 IE11
的开发版本中同时交付 Proxy
和 ES5
的响应式实现。当它在反对 Proxy
的开发环境中运行时,它将检测并正告不兼容 IE11
的用法。从实践上讲,这是可行的,但因为须要将这两种实现混合在一起,并且在开发和生产之间存在行为差别的危险,因而造成了极大的复杂性。
长期保护累赘
反对 IE11
还意味着咱们必须思考整个代码库中应用的语言性能,并为咱们的分包找出正确的 polyfill
策略。IE11
中无奈被 polyfill
的每个新性能的增加都会造成另一个行为的正告。一旦 Vue3
承诺了对 IE11
的反对,咱们将无奈解脱它,直到下一个次要版本(Vue4
)。
库作者的复杂性
如果复杂度能够齐全蕴含在 Vue
自身中,那么在某种程度上依然能够承受。但在与社区成员探讨之后,咱们意识到两种响应式实现的共存也不可避免的会裸露给库作者。
通过在 Vue3
中反对 IE11
,库作者将不得不思考其库运行的 Vue3
的外部版本(可能还得反对 Vue2
)如果他们决定反对 IE11
,则必须思考用 ES5
的响应式原理来编写他们的库。
为 IE11 奉献持久力
没有人喜爱反对 IE11
。这是曾经被淘汰掉的浏览器。当网络生态系统向前倒退的越远,咱们在尝试反对它时须要克服的差距就越大。而具备讥刺象征的是,如果在 Vue3
中反对 IE11
,那就相当于咱们给了它更多坚挺的理由。鉴于咱们的用户群,放弃 IE11
的反对可能会使其淘汰的更快。
对于相对须要 IE11 反对的用户
咱们深知,对于那些真正须要 IE11
的人:金融机构、教育部门以及依赖 IE11
屏幕阅读器的人们。如果要构建针对这些畛域的应用程序,则可能别无选择。
如果真的须要兼容 IE11
,咱们的倡议是应用 Vue2
。因为与其为 Vue3
和 Vue
的将来版本承当大量技术累赘,还不如将工作重心转向将兼容性能向后移植到 2.7
版本中的 Vue2
呢。并且确保在两个次要版本中取得更近的开发体验将更加的有意义。
能够反向移植到 2.7 的一些性能:
- 将
@vue/composition-api
插件合并到Vue2
中。这将使基于Composition API
的库间接实用于Vue2
和Vue3
<script setup>
单文件组件中的语法emits
选项TypeScript
类型改良- 在
Vite
中正式反对Vue2
留神:以上列表只是长期的,具体的将会在独自的 RFC 中进行探讨 / 定稿。
结语
本文首发于公众号:《前端学不动》