微软新版渲染引擎Spartan项目的秘密

332 查看

编注:在1995年推出了 IE 浏览器后,微软最近做出了最重大的改变:他们推出了一个名为 Spartan 的新浏览器。那么作为Web设计师和开发者,微软的这个项目意味着什么呢?Spartan将会使用什么渲染引擎,这个渲染引擎又会如何影响我们的工作?我们和微软Web平台组的高级工程师 Jacob Rossi 探讨了这个新浏览器及其背后的渲染引擎,还提出了这个浏览器在将来时不时会取代IE的疑问。这篇文章由Jacob撰写,是我们对话的总结,也许其中有一些观点你会觉得很有用。

Spartan项目已经做了一段时间,在接下来的几个月里我们也将继续研究这个新浏览器,它将会带给用户什么新东西,它会以什么样子展现在用户面前。用户和开发者用上 Spartan,还需要几个月时间,但我们现在已经可以分享一些有意思的东西给大家。这篇文章将会介绍Spartan渲染引擎背后的故事,它的发展方向,经过20多年发展的 IE(Trident)平台是如何帮助我们设计Spartan的。

 

我们从 IE 中学到的教训

20年前,微软首次推出 IE。对于许多用户来说,这是一个家喻户晓的名字,也是一个闻名世界的品牌,但是对于Web开发者来说,旧版的IE浏览器对开发者的工作造成不少的负担,以至于微软为新版IE做的努力常常被人忽略。虽然Web开发者对于IE的各历史版本的印象可能都停留在各种bugs、hacks还有各种变通方法,但 IE 确实在努力地改善Web开发环境,在CSS、动态HTML脚本、DOM、Ajax/XMLHttpRequest、拖动、innerHTML、硬件加速,以及Web的其他技术都有体现。

在微软的浏览器团队中,我们将自己摆在一个学习者的姿态上。每年,我们都从过去的经验里获得成长。吸取经验教训,每一个IE版本的发布都能体现我们的理念。考虑到IE要如何与其他浏览器共存、对标准的实现,还有IE在兼容性、可操作性、性能和安全等等方面的思考,让我们设计出了这个新的渲染引擎。

 

微软的新渲染引擎

新版微软浏览器将会由 EdgeHTML.dll 这个新的渲染引擎驱动。Windows 10已经整合了该引擎,这个引擎将会和驱动 IE 上多年的Trident(MSHTML.dll)分离开。

正如我们所知道的,使用Trident内核的最新浏览器是IE 11,IE11已经很出色地支持了各种标准(我曾经想要列出IE11所支持的标准,发现已经有75个之多的时候,我就停下了)。但是IE的进步,却被它的各个历史版本(IE5.5、IE7、IE8、 IE9 和IE10文档模式)给掩盖了。

所以我们决定,新引擎要以IE11已支持的标准为基准。我看着团队的工程师Justin Rogers,fork了引擎(光是提交更改就花了快45分钟)。当那个过程结束的时候,周围一片静谧,我们意识到现在可以删掉代码了,这是开发者最痛快的事情。

现在剩下的可以说是白纸一张。一个以互操作性和标准为核心的现代网络平台。从那里开始,我们做了许多工作,来保证IE和其他现代浏览器的一致性,确保开发者不需要处理太多跨浏览器兼容问题。直到现在,我们已经修复了超过3000个兼容性问题(有些bug要追溯到90年代的代码),另外我们正在努力满足40个以上的Web标准。比如longstanding innerHTML问题已经得到修复。还有一些比较新的标准,新引擎会根据最新的标准实现越来越受欢迎的Flexbox(这点可以在Windows 10预览版本中看到)。Spartan还会推出新的F12开发者工具。开发者可以在预览版本中看到以下的更新:

  • Preserve-3d
  • ES6 支持
  • XPath
  • Web Audio
  • Media Capture API
  • Web RTC 1.1 (ORTC)
  • Touch Events
  • 内容安全策略(Content Security Policy)
  • HTTP/2

事实证明,只有个现代的交互性好的渲染引擎是不足以让Web运作的更好的,还需要站点提供与现代浏览器相匹配的代码才行。所以我们的新引擎提供了新的用户代理字符串(user agent string)。如果 UA 字符串是贴纸,那新引擎(Spartan)的 UA 字符串看起来就像是当前大多数 Web 开发者的笔记本的盖。但让人惊讶的是,这个字段展现了良好的兼容性,很多站点都可以向我们的新引擎发送其现代内容。这个让我再一次相信:我们应该全力避免用户代理嗅探(user agent sniffing)

 

“听起来很棒啊,但是我们网站是基于IE8的”

为了确保向后兼容,我们不会抛弃Trident,将会采取双核的方式,来保证浏览器中新旧引擎都能用。这个切换对于用户来说是透明的。Windows 10将会使用EdgeHTML(就不用担心文档模式了),只有当发现用户在访问传统企业网站的时候,内核将会切换回Trident。这个双引擎方式允许企业在更新它们的站点的同时,不需要将本来根据老版IE定制的重要业务移植出来。这么做还有一个好处,在双引擎下,我们可以确保只要修复Trident下必要的安全问题、代码更改量小以及保证企业站点的兼容性,然后我们对新引擎就能没有后顾之忧地做修改了。

当人们使用Windows 10的时候,我们希望他们能够使用Spartan。即便这么说,IE的历史版本中还有许多重要的工具(比如自定义ActiveX、工具栏、浏览器助手对象等等)。所以如果一些企业Web应用需要更高的向后兼容,Windows10里也可以预装有IE。这个版本的IE也将会使用双引擎(和Spartan相似),这样开发者也不需要将IE和Spartan区别对待,我们的roadmap也是一样的。这个浏览器将由Chakra JavaScript引擎支持。

“这个很棒啊,但是一些用户还是在用IE8啊”

我们也听到了你的心声。令Web开发者头痛的兼容问题,同样也在困扰我们的浏览器团队。5月的时候,我们讨论了将用户升级作为最高优先级。8月,我们发布了一项浏览器支持方案,鼓励用户升级。最为显著的是,在上周我们宣布了一年内购买的Windows 7、Windows 8.1和Windows Phone 8.1用户都能享受免费升级到Windows 10。另外,我们会将Windows 10当做一种服务 — 用户可以随时选择升级,并且可以升级不同的特性(“自动升级”),而不用等到下一个主要版本发行后再升级。这就保证了新的渲染引擎能够常青(evergreen)

 

路线图前瞻

另一个让人欢喜的改变是,在过去的一年中我们允诺的不断增加我们Web平台计划和roadmap的开放性。在去年,你能感受到我们开放标准的roadmap(我的个人 side 项目之一),我们在Reddit AMA,在@IEDevChat上的对话,开发过程中分享的预览版本。在新的一年里,你将会看到更多这个方面的信息。

在标准支持方面,我们将会继续维护新特性的管道。摆在首要位置的是Web Audio、Image srcset、@supports、Flexbox的更新、Touch事件、ES6 Generators,还有一些特性可以从近期的提交里看到。在这些特性背后还有一些更大型的技术,比如Web RTC 1.1(ORTC)和Media Capture (getUserMedia()调用Web摄像头/麦克风)。除此之外,我们将开始使用用户的输入(和其他因素,比如Bing中采集到的使用数据)来调整平台发展的下一个方向。

我们计划初始版将不会定死,会根据开发者的反馈持续改进它。请大家期待Spartan的不断改变,期待大家:

  • 测试新引擎
    现在用户可以调整Windows 10技术预览版(Spartan项目预览版很快也将推出)中的IE的设置,改成使用EdgeHTML内核:打开about:flages,然后开启“实验性Web平台特性”。如果你使用的是Mac,或者手头暂时没有能够升级到Windows 10预览版的设备,可以使用RemoteIE云服务,这样也避免了下载一个巨大的虚拟机镜像(请注意:我们还在持续RemoteIE项目)。
  • 报告bugs
    我们的改进是基于bug报告和各个站点的反馈的。
    所以请到我们的标准roadmap上告诉我们你的使用情况,从2014年5月发布roadmap到目前为止,多亏了开发者的反馈,已经有超过40个标准从“待完成”到“开发中”。

从个人角度上,在Spartan的开发阶段,我就同大家分享了微软要推出的新Web渲染引擎的消息真的非常兴奋。我们也很期待在未来几个月里能向大家分享更多的关于这个项目的消息。在此期间,如果你有什么想要反馈给我们的,请联系我或者团队中的任何人。让我们一起将Web世界变得更好。