查看原文
其他

干掉 IE6!

CHRIS ZACHARIAS CSDN 2019-05-25

IE6 是如何淹没在时代的长河之中的?

万万没想到,对于 YouTube 而言,IE6 的生死仅在其 Web 团队于十年前的一次午餐间就被决定了。

作者 | CHRIS ZACHARIAS

译者 | 弯月

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

YouTube惊人的增长带来的后果喜忧参半,很多背后的故事都被粉饰的太平掩盖了。今天我想讲述一个的故事,那是在10年前,YouTube内部的一个由Web开发人员组成的小团队密谋干掉IE6,并希望侥幸逃脱。


想要放弃 IE6 的缘由


我不记得究竟发生了什么事情,只记得我们的Web开发团队在YouTube的餐厅里吃午餐的时候突然密谋干掉IE6。也许是因为当时我提交了一个CSS样式表,其在某个不完全支持的HTML上使用了属性选择器。任何Web开发人员都会认为不支持该选择器的浏览器应当忽略它。然而,旧版本的IE却并非如此。在非常特殊的条件下,在IE中针对不受支持的HTML元素使用属性选择器会创建一个内部递归,这会引发浏览器的崩溃,在极端的情况下还会导致电脑蓝屏死机。我们的软件工程师感觉很无辜,他们只是写了一个带有空src属性的<img>标签。我们团队中没有人知道在IE的早期版本中,浏览器会为空的src属性指定根路径“/”。突然之间,<img>标签表现得就像<iframe>一样,加载我们的主页及其所有相关的资源可能会引发指数级扩展的递归循环。每当一个空的图像标签加载到主页时,我们就需要全员出动,在我们的服务器崩溃之前,刻不容缓地找到有问题的代码并替换掉。

无论当时的情况如何,总之整个过程很残酷,此外就是与IE6有关。对我们网站开发团队来说,一直以来IE6都是一个祸根。每个主要冲刺,我们都需要花费1-2周的时间,修复IE6破坏的新UI。尽管苦不堪言,但我们仍然需要支持IE6,因为我们的用户可能无法升级,或者可能在特定的公司工作。当时,我们的用户群中有18%是IE6用户。我们明白我们无法放弃对IE6的支持。然而,那天当我们坐在咖啡厅里,想起过去的几天里我们只睡了几个小时,瞬间感觉对这些用户的同情化为乌有。我们开始集体幻想如何对IE6展开报复。有一个想法突然闪现,迅速吸引了我们所有人的注意。与其彻底放弃对IE6的支持,还不如来一次反杀呢。用户会做何反应?他们会反抗YouTube吗?他们会像过去那样,给我们团队发送威胁的信件吗?还是说他们会突然变成现代浏览器的倡导者?于是,我们做起了白日梦:世界各地坐在小格子间里的工作人员突然发现因为一些“业务”的原因需要升级浏览器。爷爷奶奶会把懂技术的孙子们抓来,帮他们修理“YouTube”。在这次“疗伤”会议上,我们拟定了一个实际的计划,一个很快我们就意识到我们需要立即执行的一个独特的计划。


YouTube放弃对IE6的支持的方法论


这个计划很简单。我们会在视频播放器上面放一个小横幅,只向IE6用户显示。上面写着“很快我们就会停止对您的浏览器的支持。请升级到一个更现代的浏览器。”我们还会在文本旁边显示主流浏览器当前版本的链接,包括Chrome、Firefox、IE8以及Opera。我们故意把这个文本写得很模糊,而且也完全没有标明具体的时间。我们希望这会对用户造成足够的威胁,迫使他们升级,而实际上我们并不需要做任何实际的停止支持的计划。如果用户想稍后再处理,他们也可以关闭这个警告。我们的代码写得非常低调,所以不会引起任何时刻监视我们的人的注意。除了Web开发团队之外,没有人会经常使用IE6,因此我们知道不太可能有人注意到我们的预备环境中的横幅。我们甚至还把为国际用户提供翻译文本的工作延后,免得负责翻译的人为了挖掘该横幅的动机而无意间曝光我们的行为。接下来,我们只需要悄无声息地将代码部署到生产环境中。

2009年YouTube放弃对IE6的支持的横幅广告

我们中的一小部分人加入YouTube的时机非常有意思……那正是在YouTube被Google收购之后几个月,在Google还没来得及将YouTube深入整合到Google之前。早期的YouTube工程师属于这片领土,最初他们很犹豫是否应该顺从Google的基础设施和规范。由于他们喜欢灰帽黑客,开快车,喝高度数的威士忌,而且很多人还穿了耳洞,有纹身,甚至还有不太严重的被捕记录,因此很多人曾在Google的面试中被拒。最后,他们都加入了YouTube,之后他们不顾一切地工作以满足指数级增长的流量的需要,同时不得不经常与那些鼓吹Google Video很快会干掉YouTube的评论家们抗争。在被Google收购后,很多工程师认为他们被抛弃了,但是他们把这种悲痛化作最终走向成功的动力。

为了在整合到Google期间巩固他们对YouTube代码库的权威,早期工程师创建了一套名为“OldTuber”的专有权限。OldTuber授权的一套权限可以完全绕过新的面向Google的代码执行政策,直接将代码提交到YouTube代码库,最多只需要找个人来审核代码。不要求代码的可读性,也不要求无需详尽的测试。更不要求维护代码覆盖率。但如果你通过不正当地使用OldTuber搞坏了网站,那么你就会立即丧失这些权限,还有可能丢工作。所以,你必须乖乖地,永远不要破坏网站。我们的老板,他自己就是早期的YouTube工程师,他费尽心思让网络开发团队讨好早期的YouTube工程师。在他的努力之下,我们中的一些人终于拿到了OldTuber身份,虽然他们并不是当初那个团队的一员。就好像走在大街上,有人误把我们当成了代客泊车的服务员,把他们法拉利的车钥匙交给了我们。姑且不论好坏,我们也不是乖乖地把钥匙还回去的人。我们看到我们的面前摆着一次机会,我们可以利用这次机会重创IE6,而且过了这个村可就没这个店了。我们之中最为“叛逆”的人是一位说话很温和的克罗地亚网络开发人员,他坚持以他的名义提交代码,他将之视作个人荣誉的徽章,我们其余人则利用我们的OldTuber身份批准代码审查。代码顺利地合并到了生产环境中,几天后我们的横幅就开始显示了。

第一个找上门的人是公关团队的负责人。他是一个聪明,衣冠楚楚的男人,总是充满活力和热情,除了这次——这次他异常地生气。他像往常一样走了进来,找到主流科技新闻出版商的电子邮件,然后问我们为什么这个星球上的第二大网站威胁要切断其近五分之一用户群的访问。对我们来说幸运的是,那篇新闻稿的定论是:这对互联网来说是一件好事。在他们看来,YouTube正致力于为所有用户提供更快、更安全的网络体验。整个公关团队都用Mac运行Chrome,所以他们甚至没有亲眼看到我们的所作所为,更不用说向媒体发表任何评论了。他们丝毫不知情。我们热切地希望告诉他们这一切都是我们发起的,我们还想帮他们制定一些谈话的要点,以便扩大他们的定论。公关团队的这位负责人对于能够掌握整件事情的原委而感到非常满意,于是,他警告我们下次在事先不告知他的情况,不能再做这样的事情,然后就转身离开了。他不希望这样伟大的公关机会再次溜走。

接下来是律师。两位资深律师气势汹汹地冲到我们的办公桌前,要求我们立刻删除那条横幅。我们解释说,我们需要让SRE们做紧急推送,这至少需要几个小时才能完成。其中一位律师非常沮丧地说:“你为什么要把Chrome放在第一位?”我感到很困惑,我解释说我们并没有优先考虑Chrome。我们的老板(也有份参与我们的密谋)是一位思虑周全的人,他建议我们按照随机顺序显示浏览器,然后为每个访问者的cookie随机种子,这样UI就不会在页面之间跳转,而我们也是按照他说的做的。事情非常凑巧,这两位律师仍然在使用IE6访问某些遗留的系统,并且他们的随机种子最终都将Chrome放在了第一位。因此,他们担心为Chrome提供优惠的待遇可能会引起欧洲监管机构的注意,因为他们在时刻寻找任何反竞争行为。虽然律师们承认,我们所做的一切并不会升级到这种程度的犯罪行为,但是我们在他们眼皮底下做了这样的事,他们当然不高兴了。我反复清除了我的IE6中的cookie,证明了每次刷新时浏览器的顺序都会被打乱。两位律师对我们的演示很满意,于是他们也迅速退回到他们的办公桌前,没有任何进一步的担忧。

我以为下一个人会是工程经理,尤其是想到我们那么明显地滥用OldTuber权限,他们肯定会非常愤怒。然而,奇怪的是那天并没有人来。第二天,一小撮工程师在网上看到了消息之后,前来祝贺我们推出横幅广告,仅此而已。我问我的老板,是否有人反击他,他耸了耸肩,表示没有人找他麻烦。照目前的情形来看,我们相安无事。面对这种情况,我感到很惊讶,也很难理解,我向一位经理探了探口风,问他对横幅发布的看法。他回答说:“哦,我以为你们只是复制了Google Docs提出的banner。”我很困惑。Google Docs怎么能与我们相提并论呢?我在IE6中打开了Google Docs,果然,其顶部显示的横幅与我们的非常相像。他们的横幅请求用户升级,以避免某些功能无法正常使用——措辞与我们的非常类似。

在处理一些共享的Javascript库时,我遇到了Google Docs团队中的一些工程师。我找到了其中一位,询问为何他们决定推出自己的 banner。他向我解释说,一直以来,他们都很想放弃对IE6的支持,但是他们的经理也因为相同的理由不同意他们这么做。他们的一位工程师在测试IE6的时候,很快就注意到了YouTube banner,并立刻找到了他们经理,说明他们也应该这么干。此后不久,GoogleDocs工程师就推出了他们自己的IE6 banner,并推到了生产环境中,因为他们以为我们已经获得了领导层的认可。而绝大多数Google员工开始讨论IE6 banner,是因为一些团队开始在Email中问他们是否可以像Google Docs那样停止对IE6的支持。幸运的是,其中也包括我们的许多经理。不可思议的事情发生了,我们以某种方式绕过了检测,成为Google内部IE6 banner的发起者。

由于像我们这样大规模、拥有如此众多用户的媒体网站放弃IE6支持的消息传播得非常迅速,最后YouTube的工程管理层终于找到了自己的团队,问他们为什么要决定放弃对IE6的支持。当意识到事情的原因后,他们开始抓住我们的老板询问细节,最后不情愿地得出结论:他们认为我们的手段是正当的。除了YouTube、Google Docs和其他几个发布IE6 banner的Google网站之外,Google开始允许其他所有网站自行添加横幅。结果IE6 banner像雨后春笋般地出现在各处。在一个月内,YouTube上IE6用户数量减少了一半,全球IE6流量下降了10%,而所有其他浏览器的数量则有所增加。这个结果比我们的Web开发团队预想得还要好。

历年来不同IE浏览器版本的市场份额(https://www.w3counter.com/trends)

我们想尽办法逃脱了监管,成功地干掉了IE6,而且还不用面临任何严肃的纠正措施。很少有人甚至知道我们参与其中,而那些确实参与其中的人也不想引起注意,更不想鼓励类似的行为。有一次,在旧金山的一个啤酒花园里,我们的老板让我们发誓再也不会这样做了。我们都同意了,既然IE6的访问量已经降低到了个位数,那么以后再也不用偷偷地将任何代码带进生产环境中了。


网友说


在回顾这一事件之际,网友们对此也展开了激烈的讨论:

评论1:天啊,好精彩的故事。

无论工程师们怎样秘密地计划这件事,一旦发布,媒体就能立刻注意到。

但是,最棒的部分就是Google的工程师们看到横幅后的第一反应是:“我们也应该这么干”(尽管他们也需要获得领导的授权才能有所动作,但有了YouTube的先例后,他们就可以说:“你看YouTube肯定经过了仔细的研究,才决定这么干的”,如此一来,获取授权就容易多了)。

你们打了漂亮的一战!

我不知道为什么你们没有被开除。我指的是所有人,包括那些以前设置了“OldTuber”权限的那些人。

但是……一切都很完美!这个故事应该铭记史册,听上去像是20多年前的那帮程序员做这件事时一无所求,只为了心中的正义(而不是为了工作的要求)。我原以为,这种行为在现在这个更加专业化的行业中不太可能发生了。

评论2:关于他们为什么没有被开除,我能想到两个原因:

  • 他们赢了这场赌局。显然,时机已经成熟,所以这样做对组织并没有什么实际的负面影响,所以不需要惩罚任何人。

  • OldTubers们是团队中最有经验的骨干。开除任何拥有该权限的人都可能对整个团队的技术能力带来毁灭性的打击。真要这么干YouTube就死了。

后一点是个非常强大的交涉条件,许多工程师甚至都没意识到自己有这个条件。比如,我的团队有许多难度非常大的工作岗位(我们对这些岗位很挑剔,而且说实话我们的面试流程很糟糕)。因此,开除一个人的成本非常高,却无法带来相应的好处。也许那个人做了过分的事情,但这件事还会再次发生吗?我知道我的团队中的一些人并不是最优秀的,但还不至于到没有他们更好的地步。

原文:http://blog.chriszacharias.com/a-conspiracy-to-kill-ie6

本文为 CSDN 翻译,转载请注明来源出处。

 

【END】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

☞华为员工年薪 200 万!真相让人心酸!

☞微信朋友圈仅一个月可见;欧盟罚完 Google 再查苹果;Oracle 杀死 JavaEE | 极客头条

☞Unix 消亡史,Linux 如何崛起 | 极客头条

☞天才程序员:25 岁进贝尔实验室,32 岁创建信息论

☞华为员工年薪 200 万!真相让人心酸!

☞太形象了!什么是边缘计算?最有趣的解释没有之一!

☞安全顾问反水成黑客, 靠瞎猜盗得5000万美元的以太币, 一个区块链大盗的另类传奇

☞人造器官新突破!美国科学家3D打印出会“呼吸”的肺 | Science

☞她说:为啥程序员都特想要机械键盘?这答案我服!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

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

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