关于前端:译尤雨溪Vue3将不会支持IE11-精力会投入到Vue27

54次阅读

共计 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 呈显著的疾速降落趋势。

咱们置信这是一个从新思考 Vue3IE11 反对的机会。

在 Vue 3 中反对 IE11 的老本

行为不统一

Vue2 的响应式零碎是基于 ES5getter / setterVue3 利用 ES6Proxy 取得了性能更高且更残缺的响应式零碎,但 Proxy 却无奈在 IE11 中进行 polyfill。这是最大的阻碍,因为这意味着如果 Vue3 要反对 IE11,它实际上须要公布两个具备不同行为的不同版本:一个是基于 Proxy 的响应式零碎,而另一个则应用相似于 Vue2 的基于 ES5getter / setter 的零碎。

Vue3 基于 Proxy 的响应式零碎提供了简直残缺的语言性能笼罩。它可能检测许多在 ES5 中不可能或不可行的操作,例如属性的增加、删除、数组索引和 length 渐变以及 in 操作符的查看等性能。为 Vue3Proxy 版本编写的雷同代码在 IE11 版本中基本不起作用。这不仅给咱们带来了技术上的复杂性,也给开发人员带来了继续的精神负担。

咱们最后的打算是在 IE11 的开发版本中同时交付 ProxyES5 的响应式实现。当它在反对 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。因为与其为 Vue3Vue 的将来版本承当大量技术累赘,还不如将工作重心转向将兼容性能向后移植到 2.7 版本中的 Vue2 呢。并且确保在两个次要版本中取得更近的开发体验将更加的有意义。

能够反向移植到 2.7 的一些性能:

  • @vue/composition-api 插件合并到 Vue2 中。这将使基于 Composition API的库间接实用于 Vue2Vue3
  • <script setup> 单文件组件中的语法
  • emits 选项
  • TypeScript 类型改良
  • Vite 中正式反对 Vue2

留神:以上列表只是长期的,具体的将会在独自的 RFC 中进行探讨 / 定稿。

结语

本文首发于公众号:《前端学不动》

正文完
 0