Internet Explorer (IE) 11 与其他所有主流浏览器之间的差距正在日益扩大。为一个技术上已经过时的浏览器添加支持,会给开发带来过多的时间和挫败感。测试变得繁重。错误修复变得至关重要。多年来,开发人员一直希望放弃 IE,但现在这样做在经济上是否可行呢?
首先,我们谈论的是一个已死的浏览器
IE 的开发于 2015 年结束。微软发布了 Edge 作为其替代品,并宣布“最新的功能和平台更新将仅在 Microsoft Edge 中可用”。
在各个方面,Edge 都是对 IE 的重大改进。即使如此,Edge 在实施 Web 标准方面也远远落后,以至于微软最近透露,他们正在使用与 Google Chrome 相同的技术从头开始重建 Edge。
然而,我们现在正在讨论是否要支持 Edge 过时的古老亲戚。Internet Explorer 糟糕到公司的一位首席项目经理在微软官方博客上发表了一篇题为使用 Internet Explorer 作为默认浏览器带来的风险的文章。它是一个停留在时间里的浏览器;网络已经发展了。

浏览器的发展速度比以往任何时候都快。想想自 2015 年以来发生的一切。CSS Grid。自定义属性。IE11 将永远不会实现任何新功能。它是一个停留在时间里的浏览器;网络已经发展了。
它阻碍了机会并导致效率低下
自微软在 2015 年弃用 IE 以来,浏览器的格局也发生了巨大变化。谷歌开发者布道师 Sam Thorogood 已经编译了一个所有功能列表,这些功能除了 IE 之外都受到所有浏览器的支持。一旦 Edge 的新 Chromium 版本发布,此列表将进一步增加。总而言之,这是一个庞大的功能集,包括新的 HTML 元素、新的 CSS 属性和新的 JavaScript 功能。许多现代 JavaScript 功能可以通过使用 polyfill 和转译来与旧版浏览器兼容。但是,在过去四年中添加到 Web 的任何 CSS 功能都无法在 IE 中正常工作。
让我们更深入地了解我们今天拥有的功能以及 IE11 如何影响它们。也许最值得注意的是,在几十年的 Web 布局黑客攻击之后,我们终于有了 CSS grid,它极大地简化了响应式布局。与 CSS 自定义属性、object-fit
、display: contents
和内在大小一起,它们都是有用的 CSS 功能示例,如果不支持它们,可能会导致网站显示损坏。在过去的五年里,我们在 CSS 中增加了一些主要功能。正是如此之多的事情的累积重量,削弱了 IE,就像一个杀手级功能一样。
虽然过去五年 Web 中的许多新增功能都与布局和样式相关,但我们在功能方面也取得了巨大的进步,例如渐进式 Web 应用。并非每个现代 API 对于需要保持向后兼容性的网站都不可用。大多数都可以包装在 if
语句中。
if ('serviceWorker' in navigator) {
// do some stuff with a service worker
} else {
// ???
}
但是,您将为 IE 用户提供非常不同的体验。越来越多的情况是,对 IE 的支持将限制可用的工具选择,因为库和框架利用了现代功能。
例如,请查看 Evan You 关于 Vue 3 发布的此公告
新的代码库目前仅针对常青浏览器,并假定支持基本的原生 ES2015。
Vue 3 代码库使用了代理——一个无法转译的 JavaScript 功能。MobX 是另一个也依赖于代理的流行框架。这两个项目都将继续维护向后兼容的版本,但它们将缺乏放弃 IE 后获得的性能改进和 API 优点。Pika,一种很棒的新包管理方法,需要支持 JavaScript 模块,而 IE 不支持。然后是 Shadow DOM——现代 Web 平台的标准化部分,它不太可能优雅地降级。
支持它需要付出巨大的努力
在评估为像 IE11 这样的已弃用浏览器提供向后兼容性需要多少额外工作时,未实现功能的长列表只是问题的一部分。浏览器是非常复杂的软件,尽管有 Web 标准,但浏览器之间不一致。IE 长期以来一直是最容易出现错误的浏览器,与 Web 标准最不符。例如,Flexbox(开发人员自 2013 年以来一直在使用的技术)在 caniuse.com 上被列为对 IE 的部分支持,因为“存在大量错误”。
IE 还提供了迄今为止最糟糕的调试体验——只有 DevTools 的基本版本。这使得修复 IE 中的错误无疑成为开发人员最令人沮丧的部分,并且可能非常耗时——占用试图发布功能的组织的时间。
支持——确保某些功能正常工作并看起来足够好——与优化之间存在差异,在优化中,您的目标是提供尽可能最佳的体验。但这确实会产生一个潜在的令人困惑的灰色地带。关于什么构成 IE 的足够好,可能会存在不同的意见。Dave Rupert 关于 IE9 的这条评论仍然适用
什么是“损坏”的界限是模糊的。它必须在视觉上损坏到什么程度才能在功能上损坏?我寻找廉价的修复方法,但这种情况加剧了以下事实:离岸 QA 团队不遵循这种细微差别,缺陷就是缺陷,会被记录并分配到我的收件箱中,污染积压工作……无论是 polyfill、流氓 if 语句、幻影样式还是 QA 退回;与在此浏览器不断减少的细分市场上呈现此网站相关的成本和技术债务。
如果您要采取功能性支持 IE 的方法,即使不是达到极致,仍然限制您在其他所有内容之上进行 polyfill、转译、前缀和测试。
许多顶级网站已经放弃了它

正式放弃对 IE 支持的热门网站包括Youtube、GitHub、Meetup、Slack、Zendesk、Trello、Atlassian、Discord、Spotify、Behance、Wix、Huddle、WhatsApp、Google 地球和雅虎。甚至微软自己的一些产品,例如Teams,也大大减少了对 IE 的支持。

Twitter 显示一条横幅,通知 IE 用户他们将无法获得最佳体验,并将用户重定向到 Twitter 网站的旧版本。当我们想到推动 Web 设计最佳实践的颠覆性公司时,Monzo、Apple Music 和 Stripe 在 IE 中显示严重错误,同时放弃了警告横幅。

为什么新的基于 Chromium 的 Edge 浏览器很重要
在最初的急剧下降之后,IE 的使用率一直在缓慢下降。浏览器继续存在的主要原因之一是:古老的业务应用程序,它们在其他任何地方都无法工作。许多大型公司仍在使用依赖于从未标准化且现已过时的 API 的应用程序。值得庆幸的是,新的 Edge 似乎可以解决此问题。在最近的一篇帖子中,Microsoft Edge 团队解释了这些公司最终将如何能够放弃 IE
该团队设计了 Internet Explorer 模式,目标是与今天在 IE11 中工作的网站 100% 兼容。Internet Explorer 模式在视觉上看起来就像只是下一代 Microsoft Edge 的一部分……通过利用企业模式站点列表,IT 专业人员可以使下一代 Microsoft Edge 的用户能够简单地导航到依赖 IE11 的站点,并且它们将正常工作。
.@MicrosoftEdge:一个浏览器,满足所有网页体验。IE 模式允许您在同一窗口中直接查看和访问旧版网站。 #MSBuild https://#/NXcDjDB5B4 pic.twitter.com/x7BtCtASNs
— Microsoft Edge Dev (@MSEdgeDev) 2019年5月6日
在使用 Beta 版几个月后,我可以说它是一款真正优秀的浏览器。我甚至敢说,它比 Google Chrome 更好?微软已经开始大力推广它。Edge 是 Windows 10 的默认浏览器。数亿台设备仍在运行旧版本的 Windows 操作系统,而这些系统上无法使用 Edge。新的基于 Chromium 的版本将为 Windows 7 和 8 提供支持。对于仍然使用旧设备和旧操作系统的用户来说,再也没有理由继续使用 IE 了。Windows 7 仍然是世界上最流行的操作系统之一,但其生命周期将于 2020 年 1 月结束,这也有助于在个人和企业升级到 Windows 10 时推动 Edge 的采用。
换句话说,现在是放弃支持的最佳时机。
性能成本
所有当前的浏览器都支持 ECMAScript 2015(最新版本的 JavaScript)——并且已经支持了一段时间。将 JavaScript 转换为旧版(更慢)版本仍然是整个行业中常见做法,但目前只有 Internet Explorer 需要这样做。此过程允许开发人员编写现代语法,使其仍然可以在 IE 中工作,但会对性能产生负面影响。Google 工程师 Philip Walton 对这个问题发表了自己的看法
更大的文件下载时间更长,但解析和评估时间也更长。当我比较我网站上的这两个版本时,旧版版本的解析/评估时间也始终大约是新版版本的的两倍。[…] 向低端移动浏览器发送大量不需要的 JavaScript 的成本可能非常高!我们(Chrome 团队)已经看到了很多次 polyfill 膨胀导致低端移动设备上网站启动时间增加数秒的情况。
可以使用差异化服务方法来解决此问题,但这会给构建工具增加少量复杂性。我不确定在查看支持 IE 所需的整体工作量时,是否值得为此费心。
另一个例子:如果您要使用现代 API,IE 需要大量的 polyfill。这通常会在此过程中向其他浏览器发送额外的、不必要的代码。另一种方法,polyfill.io,即使对于不需要 polyfill 的现代浏览器,也会增加一个额外的、阻塞的 HTTP 请求。这两种方法都会对性能造成不利影响。
至于 CSS,像 CSS 网格这样的现代功能减少了对 Bootstrap 等庞大框架的需求。如果我们必须支持 IE,我们就无法减少这些额外的负担。其他现代 CSS 属性可以以更稳定、性能更高的方式替代传统上使用 JavaScript 完成的工作。利用它们将有利于性能和成本。
谈谈钱
一个(过于简单的)计算方法是比较修复 IE 错误所需的开发人员时间成本以及解决 IE 问题导致的生产力损失与 IE 用户带来的收入。除非您是一家从 IE 中获得大量收入的大公司,否则这是一个简单的决定。对于大型公司来说,风险要高得多。例如,亚马逊规模的网站可能会从 IE 用户那里获得数千万美元的收入,即使他们只占总流量的不到 1%。
我认为,任何规模如此之大的网站都将从放弃支持中获益更多,因为这可以缩短加载时间并降低跳出率,而这两者对收入都至关重要。对于大型公司来说,问题不在于是否值得花费额外的开发时间来确保向后兼容性。**问题在于,您是否冒着通过牺牲性能和现代功能提供的机遇来降低绝大多数用户体验的风险。** 通过不鼓励开发人员关心新的浏览器功能,他们在创新和构建最佳产品方面受到了阻碍。
拥有好奇心强、求知欲旺盛的开发人员是一项非常宝贵的财富,他们会探索并跟上新技术的步伐。通过支持 IE,您实际上是在让开发人员脱离新技术。尝试跟上新技术的步伐,却发现自己无法使用某些功能,这令人沮丧。但这并不是要将开发人员体验置于用户体验之上。当您改善开发人员体验时,开发人员就能提高工作效率并发布功能——用户想要的功能。
网页开发很困难
据报道,今年早些时候,租车公司赫兹起诉埃森哲数千万美元。埃森哲是一家价值数十亿美元的财富全球 500 强公司。然而,赫兹声称,尽管价格高得惊人,但他们“从未交付过功能完善的网站或移动应用程序”。
赫兹提交的诉讼中最令人费解的指控之一是,埃森哲没有采用响应式设计……尽管错过了五个多月的截止日期,没有完成任何元素,并且代码中充满了错误,但埃森哲告诉赫兹,完成该项目需要额外花费 1000 万美元——这笔费用是在已经支付的 3200 万美元的基础上的。
埃森哲/赫兹事件是一个令人震惊的无能的例子,但它也让人们清醒地认识到,网页开发是一项艰巨的任务。然而,大多数公司都未能利用使开发更容易的事物。微软、谷歌、Mozilla 和苹果之所以投入大量资金开发新的浏览器功能,是有原因的。近年来浏览器取得的改进和创新扩展了 Web 平台上可以交付的内容,同时简化了开发人员的工作。
快速行动,发布产品
开发行业喜欢使用一些术语——比如敏捷和颠覆式——这些术语暗示了轻量级的创新。然而,我们不是专注于发布功能并为绝大多数用户创造出色的体验,而是迎合了一个过时的旧版浏览器。我工作过的所有公司都一直在谈论技术债务。遗留代码的负担被准确地视为减缓开发人员速度的东西。**由于未能利用现代浏览器提供的功能,我们今天编写的代码在编写的那一刻就变成了遗留代码。** 通过为现代 Web 编写代码,您不仅可以提高当今的工作效率,还可以创建将来更容易维护的代码。从长远来看,这是正确的选择。
招聘和留任
一些业务利益相关者不会认为开发人员的幸福感对底线很重要。然而,招聘优秀的工程师非常困难。与其他行业相比,平均任期较短。没有什么比一天的 IE 调试更能损害开发人员的士气了。在 Mozilla 进行的一项对 76,118 名开发人员的调查中,“必须支持特定的浏览器(例如 IE11)”被评为网页开发中最令人沮丧的事情。“避免或删除在不同浏览器中无法正常工作的功能”位居第三,而跨不同浏览器进行测试则位居第四。通过最大限度地减少这些挫折,决定停止支持 IE 可以帮助招聘和留住工程师。
IE 用户仍然可以访问您的网站
我们生活在一个多设备的世界。一些用户很幸运地拥有雇主提供的电脑、个人笔记本电脑以及平板电脑。智能手机随处可见。如果 IE 用户在使用您的网站时遇到问题,他们可以在其他设备上完成交易。或者他们可以打开其他浏览器,因为 Microsoft Edge 预装在 Windows 10 上。
跨浏览器测试的现实
如果你有一个完善且严格的跨浏览器测试流程,并且始终遵循它,那么恭喜你!根据我的经验,这种情况很少见。许多公司只在 Chrome 中进行测试。通过减少跨浏览器测试的负担,可以更有可能让开发者和利益相关者真正地执行它。从经济角度来看,消除流行浏览器中的所有错误,远比迎合 IE 更值得。
你计划何时停止支持 IE?
不可避免地,你自己的分析数据将成为决定是否停止支持 IE 是否明智的决定因素。浏览器使用情况在世界各地差异巨大——从韩国的近 10% 到世界许多地区的远低于 1%。即使你认为今天对你特定的网站来说还为时过早,也要确保在新的 Microsoft Edge 发布后重新评估你的分析数据。
如果可以,我会立即停止在每个项目中对 IE 的支持。不幸的是,与只使用默认微软软件的企业客户合作,加上微软坚持在新版 Windows 中永远不会删除任何功能,这意味着他们至少在未来十年内都会使用 IE。
而且不用担心,Safari 将取代 Internet Explorer 的位置。
Safari 并不是真正的威胁。有疑问的决定?当然。但它是一个常青浏览器,不会像 IE 那样多年来阻止用户升级。
人们的记忆力很短,对过去的看法也存在偏差。IE 的真正问题在于它变得过于占据主导地位,以至于没有人费心去让他们的网站在任何其他浏览器中都能正常工作。这听起来很像我们现在在 Chrome 中遇到的情况……
太对了!Safari 甚至不支持所有 HTML5 输入类型。
这就是 Chrome 粉丝文化得以延续的方式。这减少了网络的自由。人们不是提出标准和统一,而是想要围绕一个浏览器构建,并将其作为标准。
这不是“Chrome 粉丝文化”。它也不会“减少网络的自由”。
Internet Explorer 才是那个没有遵循网络浏览器标准化功能的那个,因为它已经超过五年没有开发了。
事实上,正是 Internet Explorer 最初没有遵循标准,因为它实现了所有微软特定的功能,而这些功能正是企业应用程序只能在 IE 中运行的原因。
没有看到有人抱怨 Firefox,只有互联网上的“病人”。
我毫不怀疑,如果在没有任何其他背景的情况下被问到,每个网页开发者都会说“是的,我非常乐意停止对 IE 的支持”。我很遗憾看到作者陷入了主要存在于互联网上的针对 IE 的肤浅论点,而完全忽略了它在企业(在企业中,它通常被公司 IT 部门强制要求作为唯一可用的浏览器)和发展中国家的巨大使用量。我希望至少能承认这些涉及数百万人的有效案例,但相反,我们得到的却是“看,[网页开发者喜欢的那个东西]停止了对 IE 的支持,所以你也可以!”
作者确实提到了这件事,不是吗?
首先,这是一个开发者案例,而不是商业案例。即使在金钱部分,你也会回到开发者体验。而且支持 IE11 并不难,根据我的经验,从 IE11 获得的收入高于为其开发的成本。
为什么不对 IE11 用户表示一些同情,而不是从开发者的角度“我想使用新功能”来看待它。尝试理解为什么用户坚持使用 IE11……他们坚持使用有很多社会和经济原因。
“首先,这是一个开发者案例,而不是商业案例。”
完全同意。
这篇文章提出了我们绝大多数人(如果不是所有人)都同意的观点,但它们都是技术层面的观点。
IE11 与 Windows 捆绑在一起,在企业现实中,这意味着需要支持和明确的责任链。
这实际上是我老板上周问我的问题。
我一点也不专业,但我能看懂数字。在个人层面上,我 100% 支持停止对 IE 的支持。我以为数据会支持我的观点,而且乍一看,它们确实支持。不到 5% 的访问者使用某个版本的 IE。我?欣喜若狂。
但更深入的研究让我清醒地认识到:这 5% 代表了我们业务的 10% 多一点。不能忽视十分之一。
是啊。我仍然大声哭泣。
我喜欢 Chromium,但我不是“Chrome 粉丝文化”的粉丝(引用上面的帖子)。是的,有一些因素你不能忽视。例如,如果你的主要供应商之一只依赖于 IE 会怎么样?
在内部,我们广泛使用 Vivaldi/Firefox/Waterfox/Edge。实际上,除了 IE 之外的任何东西!取决于个人的选择和/或需求。但我无法管理 IT 部门强加给我的通话对象的任何事情。
总而言之,你的调查和分析数据应该能给你一个非常明确的答案。
顺便说一句,转译后的代码不一定慢(通常更快)。这是因为原生对应实现正在进行额外的检查和程序以符合标准。
很久以前我就放弃了对 IE 的支持。我曾经因为试图一直支持到 IE6 而阻碍了自己,但后来我意识到这一切有多么根本的错误。随着所有 SSL 的漏洞和降级攻击,我实际上是在通过支持旧浏览器将用户置于危险之中,同时也极大地增加了开发难度并限制了我可以实现的功能。
但我并不认为这是排斥浏览器。相反,它是最低支持的功能。如果你的浏览器不支持模块、类和 async/await,则不满足要求。
这对于购买的计算机软件来说曾经是可以接受的。为什么对于一个免费的网站来说会成为问题,尤其是在有更好的浏览器免费提供的情况下。
无论如何,Safari 绝对是当前的障碍。仅仅因为它“常青”并不意味着它现代。Safari 远远落后,并且有很多糟糕的实现,包括像
Date
这样简单的东西。多年来,我一直确保我的用户在使用旧浏览器时会收到一个巨大的安全警报弹出窗口。这是给你的,S。
它关心客户并友好地提醒他,停止做蠢事!
运行一段时间后,你的比例会降到 5% 以下。
不错。现在想想那些正在运行 IE 的老年人,因为他们甚至不知道什么是浏览器。你的警报弹出窗口与“你有 8 个病毒,点击此处修复”的提示以及他们一直收到的所有其他垃圾邮件有什么不同,而我们教他们永远不要点击这些东西?
没有人愿意使用 IE。没有人。他们只是没有足够的科技知识来安装任何其他浏览器,或者被锁定在不允许他们安装任何东西的公司/政府设备中。警报弹出窗口不会改变这一点。我敢打赌,你看到的百分比下降仅仅是因为用户因为烦人的弹出窗口而没有返回,而不是因为他们切换到更新的浏览器。
“运行一段时间后,你的比例会降到 5% 以下。”
低于 5%?
就像 Safari 或 Firefox 一样?
虽然我认为所有这些观点都有道理,但我认为您忽略了使用 IE 的真正原因,因此得出了有问题的结论。
“古老的商业应用程序在其他任何地方都无法运行”是一种误解。如果这是其他网站上使用 IE 的来源,人们只需在他们的古老应用程序中运行 IE,并在所有其他地方运行最新的浏览器。
真正的原因仅仅是人们不知道,或者被锁定在不允许他们选择的公司系统中。
我仍然发现老年人和上了年纪的人将 IE 图标称为“互联网”。他们不知道什么是浏览器,甚至不认为该图标是快捷方式……IE 的徽标就是互联网。我们不能合理地期望他们安装新的浏览器,无论我们向他们展示多少横幅和提示。特别是我们首先教导非技术人员的第一件事就是“不要安装任何东西”。
至于公司/政府锁定的设备,它们可能正在运行 IE,甚至被锁定在旧版本的“最新”浏览器中。检查 caniuse 上任何内容的使用统计数据,您会发现仍然在使用 Chrome、Firefox、Edge 和 Safari 的一小部分非常旧的版本。
一旦我们决定不再支持 IE,我们就也无法支持锁定在旧版最新浏览器或较小浏览器(尤其是为低资源设备开发的浏览器)中的人员。我们倾向于关注使用 IE 的 1-1.5% 的用户,并方便地忘记了其他可能达到 5-10% 的浏览器,具体取决于给定的功能。
至少对于 CSS 方面,更好的解决方案是简单地使用渐进增强。如果您要使用网格并且不想构建回退,则简单的媒体查询将确保任何在不支持网格的浏览器上访问 Web/应用程序的人都能获得浏览器默认设置,即块布局。
在大多数情况下,如果采用移动优先的思维方式构建,我们可以为缺乏功能的浏览器提供与移动设备几乎相同的布局,完全降低了维护另一种布局的成本。是的,他们的体验会有所不同,但这并没有错。
我认为在 JS 方面可能会变得更复杂。有一些技术只会将 polyfill 和 transpilation 提供给需要它们的浏览器,从而使其他所有人的性能成本保持在可以忽略不计的水平。尽管正如您正确指出的那样,有些功能根本无法 transpile,因此应更加谨慎地对待它们。但我认为在大多数情况下,完全放弃支持并不是正确的方法。
IE 支持不是关于支持 IE。而是关于支持老人、穷人和运行锁定设备的人。
微软几年前停止了 Internet Explorer 的开发,并推出了 Microsoft Edge 来替代它。Internet Explorer 已经过时,过去几乎没有人使用它。这里很好地解释了放弃 Internet Explorer 的商业案例,我认为这种改变是必要的。