(注意:本文内容比较血腥,请未成年人在家长陪同下谨慎观看,译注)
“Internet Explorer 需要死掉。”
这句话已经被无数软件开发人员念叨了很久很久,但如今这句话好像真的快要成为现实了。IE11 是最后一款不支持 ES6 的主流浏览器,而 ES6 是 JavaScript 的一次重大更新。Web 业界一直都遵循渐进增强的原则,所以一般来说这也不是什么问题;但现在流行的 JS 应用程序都在使用来自 npm 包管理库的软件包,于是我们的现状变得相当奇特。一方面,我们自己的应用程序代码是用 ES6 及更高版本编写的,另一方面我们依赖的大多数模块仍然以 IE11 和 ES5 为目标,结果不仅让代码体积变大,还需要很多 polyfill。IE11 需要死掉,这样模块编写者才能默认使用更小、更快的 ES6 目标,这对我们所有人都有好处!
为了找出杀死 IE11 的最佳方法,我们需要回顾一下之前两个 IE 版本的命运是怎样终结的:它们就是 IE6 和 IE8。以史为鉴,我们就可以评估能让 IE11 落幕的策略。我们可以预测合适的路径,向大家宣传可行的做法,最终将 JS 社区从 ES5 的拖累中解放出来。
谁杀死了 IE6?
(本文小标题化用了著名英国黑暗童谣——谁杀死了知更鸟,译注)
时钟拨回 2009 年,微软在那一年遇到了麻烦。彼时 IE7 已经面世,IE8 即将发布,可 IE6 的市场份额仍然居高不下。众所周知,在那个年代 IE6 已经成为微软的一个糟糕的品牌形象,也是自它在 2001 年发布以来,被其统治多年的 Web 产业停滞不前的象征;IE6 已经明显落后于 Firefox 和 Chrome,后两者都已经开始要挑战IE的市场主导地位。让问题变得更加复杂的一个因素在于,许多企业级 Windows 客户端需要保持在 IE6 或 IE7 上,业界围绕着这种需求构建了众多满足他们癖好的 Web 应用。微软需要一种方法来埋葬 IE6,使企业能够维持对其新业务的需求。
一号嫌疑人:自动升级到 IE8
微软也知道自己的用户才不会自己主动升级,所以宣布将在 2009 年 7 月通过 Windows 更新自动将 IE6 和 IE7 用户升级到 IE8。与此同时微软还为企业用户提供了两个妥协支持手段:一个是阻止自动升级的选项,另一个是允许在 IE8 中支离破碎的页面继续使用 IE7 的呈现引擎,即所谓“兼容模式”。那么微软成功了吗?资料显示,从 6 月 9 日到 7 月 9 日,IE6 的使用率一举从 24.6%下降到了 15.6%。据多家媒体报道,这一猛烈的下降势头是因为 Youtube 用网页横幅广告要求用户从 IE6 升级到其他浏览器的结果;但虽然这一举措可能说服了一些用户,谁都知道自动升级才是主要的贡献因素,并不是因为员工们催促自己的老板快点升级。
二号嫌疑人:IE6 倒计时
2011 年 3 月时,微软的自动升级到 IE8 的策略已经产生了显著的影响,但 IE6 的全球使用率仍然高达 12%;于是微软发起了一场营销活动,催促人们尽快放弃 IE6。向 IE6 告别的 ie6countdown.com 网站上线,跟踪其消亡步伐并向全世界宣布微软自己已经不再需要它了。微软的目标是让 IE6 的全球使用率低于 1%。然而到2014年6月这个数字仍然高达3.8%。不过胜利就在眼前:大多数国家的使用率都已低于 1%,只有中国除外,使用率徘徊在 12.5%左右。为了使 IE6 在全球范围内的使用率最终低于 1%,必须采取措施迫使中国用户升级。
三号嫌疑人:POODLE
当时大多数网站都同时支持 SSL 和 TLS,这两个独立的协议是用来增强“https://”连接的,而其中 TLS 是一种更安全、更现代化的协议。这一状况在 2014 年 10 月 14 日发生了变化,当时谷歌安全小组宣布他们发现了一个名为POODLE的新漏洞。POODLE 能明文呈现 SSLv3 加密的所有密文,意味着 SSL 本身已经不再安全了。Twitter 等主流网站以及 Cloudflare 等主流 CDN 随后都禁用了 SSL。而所有不支持 TLS 协议的浏览器(IE6 就是典型)都无法连接到这些网站!这是对 IE6 的最后一击。到2014年11月,全球范围内IE6的使用率终于降到了1%
!
判决
回顾历史,可以说从 IE6 到 IE8 的自动升级对 IE6 的使用率造成了巨大打击,但是致命一击是来自 POODLE 的,它使主流网站实际上屏蔽了 IE6 的连接。接下来我们来看看 IE8 的命运,与 IE6 做个对比。
谁杀死了 IE8?
如果 IE6 的存在曾让人十分不爽,那么 IE8 简直就让人抓狂。是的,IE8 要比 IE6 先进一大截,但 IE8 却是最后一款被描述为“旧版 IE”的浏览器。IE8 仍然包含许多非标准浏览器 API、不支持 ES5、缺少大部分 HTML5 支持,并且没有内置控制台。如果你还记得 html5shiv、es5-shim、es5-sham 或者警报驱动开发这些名词,那么你肯定能理解当年的痛苦。作为参考,当 jQuery 最终放弃 IE8 时它的体积一下子减少了 30%。对于 Web 开发社区来说幸运的是,IE8 的替代方案应该不会再重蹈覆辙了。
一号嫌疑人:IE9
前文提到 IE8 的自动升级为 IE6 的消亡贡献颇大,你可能会想说 IE9 的崛起也敲响了 IE8 的丧钟。不幸的是你错了。IE6 并不是一款“终端浏览器”,所以很容易通过简单的升级就走向灭亡。但一款终端浏览器必须跟随底层操作系统一起升级。可悲之处在于 IE8 是 Windows XP 的终端浏览器。也就是说如果你想从 IE8 升级到 IE9,你必须购买 Windows Vista 才行!没错,你的确可以免费获得 Firefox 或 Chrome;但是为了使用 IE9,你需要花钱才能买到 Windows Vista 或新电脑。因此 IE9 与 IE8 的灭亡没什么关系。
二号嫌疑人:Chrome
可以得出的更明显结论是谷歌 Chrome 杀死了 IE8。在某种程度上来说这是正确的答案。自 2008 年发布以来,Chrome 的市场份额一直在不断增长。谷歌在自家产品中到处张贴 Chrome 的下载提示,包括其主页上也是如此,而谷歌主页也恰好是当时互联网上访问量最大的页面。再结合常青树发布策略以及几项跟上主流乃至领先同行的创新,Chrome 成为了一股不可阻挡的力量,从所有市场中吞噬了大量的份额。然而这一趋势顶多能算是缓慢的量变。IE8 在 2011 年 5 月达到 29%的峰值市占率,之后直到 2016 年 9 月之前市占率都高于 1%。
三号嫌疑人:TLS 1.0/1.1 被淘汰
PCI 安全标准委员会是负责制定帐户数据安全保护标准的机构。当你接受应用程序中的信用证书时,你可能已经完成了一次 PCI 合规性审计。2017 年 6 月 30 日 PCI SSC 宣布,从 2018 年 6 月 30 日起通过合规审计的应用必须禁用 TLS 1.0,并且强烈建议应用不要使用 TLS 1.1。从某种程度上来说,这一冲击的影响与 POODLE 这样的攻击类似,都迫使行业转向逐步加强的安全协议。许多 CDN 和网站都紧随其步伐并放弃了 TLS 1.0 和 1.1,与 POODLE 事件时他们放弃 SSLv3 的做法类似。就像 IE6 根本不支持 TLS 一样,IE8 也仅支持 TLS 1.0 和 TLS 1.1,结果也被这些网站切断了连接。历史重演,更强大的安全措施让 IE 在互联网上无处安身。但这一次,IE8 很快就落到了互联网流量的 1%以下。旧版 TLS 的淘汰可能给 IE8 的棺材钉上了最后一颗钉子,但它那时已经完蛋了。
判决
看起来 IE8 是死在了 Chrome 手中,经历了缓慢的死亡过程;作为 XP 的默认浏览器,IE8 注定要与 XP 一起迈入夕阳的余晖中。
无法摧毁 IE11 的策略
总结起来,我们从 IE6 和 IE8 的历史中学到了一些教训,知道了哪些策略对摧毁 IE11 来说是无济于事的。
❌像 IE6 倒计时那样的营销活动:据我所知,这只不过是告诉全世界微软已准备好继续前进。这种办法没什么效果。此外微软已经告全世界不要再用IE11了。
❌其他浏览器吞噬其市场份额:Chrome 已经占据了主导地位,且这一状况已维持了多年。在这个时间点上,IE11 的市占率曲线看起来很像 IE8 …也就是说,竞争对手正以缓慢而稳定的速度吃掉它的份额。我们在此是无能为力的。
❌安全需求提升:IE11 支持 TLS 1.2,这个版本可能会继续沿用多年。除非 TLS 1.2 爆出严重漏洞,否则其他因素都不会导致其早日消亡。此外,祈祷 TLS 中的漏洞杀死 IE11 是很阴暗的想法!但我们也要看到,提前推行新版本的大型网站可能会对整个互联网产生巨大影响。
那么我们可以做些什么来杀死 IE11?哪些策略能让我们最终从 ES5 中解放出来?怎样才能杀死最后一个真正的终端浏览器呢?
杀死 IE11
事实证明,唯一真正有效的办法是自动升级。为了做到这一点,我们知道 IE 需要是非终端浏览器,正如 IE6 那样。我们还知道替换原有浏览器需要一个安抚现有企业用户的计划,就像 IE8 的兼容模式那样。那么假设用微软 Edge 作为替代品,IE11 该怎样升级呢?
在撰写本文时,IE11 是 Windows 7、8 和 8.1 上的终端浏览器。幸运的是,微软 Edge 已经开始采用 Chromium 作为其呈现引擎了,迟早会出现在这些版本的 Windows 中。使用新引擎的Edge的预览版已经可用了。这样一来这些平台终于有机会从 IE11 自动升级到 Edge 了!
尽管这一前景令人兴奋,但仍然有企业客户需要保留对 IE11 的兼容性,这些企业构成了 IE11 剩余市场份额中的主要部分。微软又先人一步,已经宣布 Windows 7、8 和 8.1 上的 Edge 将具有“Internet Explorer模式”,这将允许 IT 管理员使用安全/阻止列表在应该使用 IE11 的网站上使用兼容模式,而对互联网的剩余内容使用 Chromium 呈现!
那么我们还能做什么呢?虽然技术上自动升级是可行的,但微软已经宣布取消从 IE11 到 Edge 的自动更新计划。这里就是我们做文章的好机会了。
行动呼吁
所以我们能做些什么?
首先,我们已经看到市场领导者放弃某些技术将影响浏览器市场。这里的关键在于旧技术必须被弃用(如 SSLv3),而不仅仅是建议删除(如 Youtube 的放弃 IE6 横幅广告)。虽说建议谷歌、Facebook 等巨头屏蔽 IE11 的连接好像不可思议,但一旦 Edge 开始支持旧版 Windows,这些企业就没有理由继续宽待 IE11 了。巨头的行动反过来也会给微软增加压力,让他们考虑自动升级的策略。你(是的,就是你!)可以声明一旦 Edge 开始支持旧版 Windows,就决定屏蔽 IE11,这就是投身这一运动的最佳方式!
其次,你可以询问你最喜欢的开源软件包是否以及何时计划放弃 ES5 这个编译目标。记住要礼貌,只是好奇地问一句,不要提要求。开源维护者不欠我们任何东西,但礼貌地询问他们是否要放弃 ES5 可能会打开人家的思路,促使别人开始行动!
最后,你可以使用 #killIE 主题标签来在社交媒体上呼吁自动升级策略。微软一直非常关注 Web 社区舆论,所以公开讨论这个问题,并推动社区放弃对 IE 的支持可能成为一个转折点!
如果我们成功了,我们会回过头来说“微软通过自动升级到 Edge 的做法杀死了 IE11。”最后,我们终于将停止编译到 ES5 了;最后,我们终于不用再向主流浏览器发送不必要的 polyfill 了;最后,我们的世界到处都会是 ES6 了;最后,Internet Explorer 终于死掉了。
感谢 Fred K.Schott 和 Brian Kardell 对本文的贡献。
英文原文:https://mike.sherov.com/ie11-countdown/
评论