與過去決裂:微軟新的 Web 轉譯引擎誕生

原文出自: A break from the past: the birth of Microsoft's new web rendering engine

如同我們在上個月所宣布,Project Spartan 將成為所有 Windows 10 裝置的新瀏覽器,從手機到平板電腦、個人電腦到更多裝置。在未來幾個月您將聽到關於新瀏覽器的功能,但在這篇文章中,我們想告訴您的是什麼動機促使我們打造一個新的轉譯引擎,並將重點放在與其他現代瀏覽器互通性-為我們的客戶以各種名義打造的 Web 能夠 “正確工作(just work)”。這種新的轉譯引擎主要設計於 Project Spartan 中,但為了需要傳統擴充性支援的企業和其他客戶,在 Windows 10 的 Internet Explorer也將可供使用。

現代化IE,而不是破壞 Web

Internet Explorer 在 20 多年來一直是微軟 Web 瀏覽器,並在此期間與不斷變化的網站逐步成長。2009 年以來,我們一直有系統地對瀏覽器做重要投資,使每個瀏覽器子系統現代化:從快速新的 JavaScript 和配置引擎、GPU 加速轉譯、3D 圖形、多執行緒的觸控輸入到加強 F12 開發人員工具以及企業模式向後相容性。

在這五年的重大改變:Fish IE(GPU 轉譯),Chakra fastest on SunSpider (JavaScript performance),Touch Effects(多點觸控輸入),新的F12 開發人員工具,Assassin’s Creed Pirates(WebGL)

如同我們推出的 IE 瀏覽器主要版本的顯著變化,我們已經盡力遵守口號 “不破壞 Web(don’t break the Web)”,這是個充滿雄心的目標,顧及到網路上包含超過 440 億個 Web 網站,所以我們優先考慮相容性測試的對象是 Web 上 前 9000 大的網站(佔全球大約 88% 的網路流量)。這代表了最佳點從 “領頭的 Web(head of the Web)” 變成 “長尾(long tail)”-使我們能把測試資源放在最有影響力的網站。在版本發行之前,我們將確保對於前 9000 大網站的相容性合格率,比起先前發行的 IE 版本和我們的競爭對手來的更高。

長尾問題

然而,即使我們已發行新的或改進的 IE 瀏覽器,我們聽到來自家庭成員、微軟部分同事或線上討論的抱怨,他們在 IE 瀏覽一些網站時出現問題。當我們檢查這些網站時,往往不屬於前 9000 大清單上。它們就像在街上不能夠完成線上預訂的理髮店,或是無法登入看到當地小孩足球聯賽排程等問題。

在 Windows 10 的規劃上,我們開始解決這種明顯差異-當我們的相容性測試資料顯示我們已經改善,真實世界上的相容性卻是在下降?

重新思考我們的假設

如同我們所發掘所凸顯出的一連串問題,使我們意識到我們需要相當大程度的

重新思考大部分的 Web 相容性方法:

▶傳統與現代:儘管我們持續推動新的 HTML 5 功能,我們還是預期維持舊版本的 IE 瀏覽器的相容性,尤其是針對企業 Web 應用程式。透過 Trident 的文件相容性模式提供了有限的相容性,但無法保證相容性,它修復長期以來 IE 特定行為造成問題的障礙。此外,為了修復長期以來互通性的問題,實際上將可能讓網站在 IE 特定行為的程式碼出現問題。

▶相容性檢視清單:我們的相容性合格率取決於相容性檢視清單。這使我們能夠透過強制使用舊的文件模式,模擬傳統的 IE 行為來 “修復” 破損的網站。然而,此種方法需要測試和維護,並且不能很好的擴展。 

▶X-UA-Compatible:一些網站使用 “x-ua-compatible” 標頭強制切到較舊的文件模式。他們依靠這種方式來保持該版本的網站可以在未來版本的 IE 瀏覽器正常運作,然而,這只是暫時的權宜之計,而他們對於其他現代瀏覽器則會開發常綠程式碼路徑(evergreen code path)的網站。

▶專注於標準:我們專注於建立新的 HTML 5 功能與符合 Web 標準,此舉將讓瀏覽器之間有互通性。然而,標準文件的解譯很容易發生變化,導致真實世界的互通性差距,最終導致 Web 開發人員要修復更多的 Bug 以及造成客戶更多問題網站。

與過去決裂

面對這些問題,我們需要 ”面對現實的勇氣”。我們需要一項計劃,無論Web 開發人員一開始優先開發哪一種瀏覽器的網站,都要讓他們可以很容易的建立相容的網站。我們需要一項計畫,無論我們的客戶瀏覽 Web 的開頭或結尾,都必須確保有很好的體驗。我們需要一項計畫,無論我們多麼快速的推展現代的 HTML 功能,都要讓企業客戶有高度向後相容的瀏覽器。為了要真正解決這些問題,我們意識到不能只是以累進的方式改善以前的做法,我們需要與過去決裂-這將失去的我們從 2009 年以來所做的主要投資。

務實的方法

決裂意味著新的 Web 轉譯引擎將免受 20 多年 Internet Explorer 的傳統所束縛,具有真實世界的互通性和其他瀏覽器的主要關注點-讓我們對 Windows 10 的口號變成 “the Web just works”。從這種務實的角度來看,由我們在 Windows Phone 8.1 更新工作的狀況,了解到 Web 標準是需要持續且重要的,背地裡則有推動瀏覽器之間的真實世界互通性之功用。

這種以互通性為重點的做法,造成了採用現有開放原始碼轉譯引擎(例如 WebKit)明顯的問題。雖然有一些優點,但再進一步調查後,有兩個重要原因讓我們知道這不是正確的道路。首先,Web 是基於多個獨立、尚未實現互通性原則的標準,我們覺得它是制止走向 Web 單一化的重要因素。第二,有鑒於工程所需,我們發現提供一個互通性為重點的引擎可以讓客戶腳步加快,假設從我們自己的引擎(尤其是如果脫離傳統相容性問題)開始,而不是建立一個圍繞在開發原始碼引擎的新瀏覽器。我們將持續關注開放原始碼和共享原始碼模型,在後續的文章期待分享更多的詳細資訊。 

一個新的 Web 轉譯引擎誕生

詳見 Smashing Magazine 中 Jacob Rossi 的文章,新的引擎開始作為MSHTML.DLL的一個分支,從分歧開始以來相當快速。透過這種切割,使我們能夠保持過去這幾年中主要子系統的投資,同時讓我們能夠在新的引擎中刪除文件模式和其他傳統 IE行為。另一方面,傳統引擎(MSHTML.dll)大部分可以保持不變(除了在安全和其他高優先修正下),以確保企業客戶的傳統相容性。我們還建立了傳統和新的轉譯引擎無縫切換的能力。 為了讓新舊徹底分離,我們需要一個新的使用者代理字串,以確保不會發送IE 特定行為程式碼。這建立在悠久的瀏覽器發展史之上,使用任何權杖都必須從伺服器獲取需要的內容。雖然一開始會有較低的相容性比率,但有助於修復互通性問題!

最後,由於傳統 IE 程式碼不被發送,我們能夠大幅降低對相容性檢視清單的依賴。這意味著對上位網站的相容性比率可與長尾更加相容。

修復樣本代替網站

然而,一個新的引擎是不夠的-我們還需要改進在 Web長尾如何尋找、追蹤和修復問題。要做到這一點,我們抓取萬億URL與 Bing一起做每天分析,檢測存在於 Web的開頭和Web的結尾的樣本。透過這些每天由成千上萬來自使用者透過 “笑臉” 圖示的意見反應報告,修復這些樣本,網站才能運作。

此外,我們修改內部工程流程,以確保優先由我們的資料分析發現真實世界的互通性問題。在此過程中,修復了超過 3000 個互通性 Bug,並增加了 40 個新的 Web 標準(到目前為止),以確保實現我們的目標。

我們沒有看到這項互通性工作的結束日期-我們將持續檢查資料以及對新的轉譯引擎推出改進。對於升級到 Windows 10 的使用者,該引擎是 “常綠(evergreen)” 這意味著它將保持最新的狀態以符合 Windows 10 即服務。

社群的努力

我們的使命是建立 “just work” 的 Web,沒有你的幫助不會成功。這就是為什麼 Project Spartan 旅程包含多種讓您參與的方式。以下是對於您可以協助方法的簡要介紹:

▶加入 Windows Insider Program,以獲得最新的 Windows 10 預覽,並在 about:flags 網頁中啟用 “Enable Experimental Web Platform Features” 讓您在新的轉譯引擎測試 Web 網站。如果您無法在裝置上安裝它,試試 RemoteIE,可以使用 Windows、iOS或 Android 裝置串流到 Azure 雲端來測試最新的瀏覽器。

▶如果您看到任何網站問題,使用笑臉圖示選擇 ”Send a Frown” 回報網站問題,讓我們可以追蹤它。如果您的問題有更多詳細資訊說明,您可以到 Connect 回報 Bug。

▶在 status.modern.ie 查閱我們的 Web Platform roadmap。如果有任何缺失,請在 UserVoice 網站提交功能要求,或對已經存在的要求進行投票。

▶對我們的 Twitter @IEDevChat 發送訊息,或參加每月的 #AskIE tweetchat(下一次在 2/26 @ 12PM PST)。有關更詳細的問題說明,請到我們的 StackOverflow 網頁發問問題。 

我們相信我們已經嘗試建立一個新的轉譯引擎,透過與過去的 IE 決裂,將有助於為我們的客戶提供更好的瀏覽體驗,並且讓 Web 開發人員更容易建立跨瀏覽器的 Web 網站。我們在未來幾周將會分享更多關於上述內容具體作法的詳細資訊,期待您與我們一同繼續參與這段旅程。