互聯技術變遷:雙核瀏覽器漫談
瀏覽器是我們連接互聯網的一個窗口,是上網生活中不可缺少的一個重要因素。目前的瀏覽器市場百家爭鳴,混戰不斷。目前雙核瀏覽器是一個選擇主流,但是雙核瀏覽器到底雙在哪里?相比單一內核的瀏覽器又有哪些優勢呢?在本文中就向大家介紹雙核瀏覽器。
歷史
隨著Google Chrome瀏覽器攻城略地,市場份額逐步提升,其使用的WebKit網頁渲染引擎也逐漸步入開發者的視野。在國內越來越多的第三方瀏覽器廠商開始嘗試使用WebKit渲染引擎,并結合中國的具體國情(網銀插件使用ActiveX,網頁使用大量的IE專有技術擴展)提出了雙核(雙渲染引擎)瀏覽器的概念。雙核瀏覽器通過巧妙的技術手段繞過了切換瀏覽器帶來的用戶身份的重新認證等諸多問題,在速度與兼容性方面實現了平衡。
雙核瀏覽器并非新概念,早在2005年,瀏覽器大戰烽火重新燃時,WebKit引擎還是Apple和Linux以及移動設備上的小眾渲染引擎,而Mozilla的Gecko引擎是唯一成熟的開源瀏覽器渲染引擎。 日本就有一家瀏覽器廠商Sleipnir推出了基于Gecko渲染引擎的雙核瀏覽器。在Firefox方面,則有IE Tab等擴展,可以在Firefox瀏覽器中使用IE的Trident渲染引擎。在某種意義上,國內一些愛好者打包的包含IE Tab擴展的Firefox發行版,也是一種雙核瀏覽器。
隨著Google Chrome 在2008年的推出,WebKit引擎在Windows的系統兼容性和穩定性有了非常明顯的提升,使用WebKit引擎作為普通用戶日常工作使用的瀏覽器渲染引擎漸漸成為了一個可能的選擇。國內也涌現出了很多以WebKit為主要渲染引擎的瀏覽器,主要的有Maxthon 3、Sogou瀏覽器、QQ瀏覽器(測試版)等。在技術架構上,這些基于Chrome或WebKit的瀏覽器都或多或少地參考借鑒了Chrome設計的多進程架構。默認都支持多進程瀏覽、崩潰恢復和防假死等特性。
雙核瀏覽器的特殊性
雙核瀏覽器在具體技術開發上,仍然需要面臨因為有兩套渲染引擎而帶來的獨特問題。
首先,因為兩套引擎有不同的Cookie存儲機制,需要在渲染器切換時,保留Cookie。在Trident引擎上,可以通過API接口實現自定義的Cookie存儲,但是在實踐中,經常發現丟失Cookie數據的情況。因此,另外一種常見的方式是截獲HTTP Response,手工解析處理Cookie。
其次,我們在目前的國產瀏覽器切換渲染引擎后,在網頁上點擊鼠標右鍵,可以看到右鍵的彈出菜單有明顯的不同。UI的不一致性會給普通用戶帶來困擾,典型的是在電話、文檔的交流中。從這個方面看,國產的雙核瀏覽器在用戶界面上,仍然沒有擺脫兩張皮的嫌疑。在系統設置方面,也存在同樣的問題。由于IE的某些Bug,系統設置中某些條目(安全相關)無法通過API編程接口設置,只能通過反向工程或其他手段直接修改。
最后,因為引入了雙核,實際引入了雙倍的被攻擊的風險。在安全性方面需要投入更多的資源。由于中國的具體國情,IE瀏覽器長期一家獨大,導致很多網頁(政府網站和網上銀行等)專門為IE瀏覽器設計優化。用戶使用WebKit渲染引擎的瀏覽器瀏覽會遇到很多問題,從頁面錯亂、點擊按鈕無響應、文字亂碼等不一而足。為此,國內的瀏覽器廠商也在與IE專有特性的兼容性方面做了很多的工作。
兼容IE特性的幾個層面
改進WebKit或Gecko內核(以下不區分WebKit或Gecko,統稱為內核),使之兼容IE的擴展特性是一個非常大的方向,具體包括下面幾個兼容層面。
DOM的兼容:增加目前不被內核支持的DOM元素及DOM元素屬性。這個層面的兼容開發最簡單,引入的副作用最小。
CSS的兼容:在兼容模式下,修改CSS的行為(典型的Box模型),增加IE擴展的屬性。但這個層面上不可避免地會引入IE帶來的對CSS的錯誤實現,這個實現是IE開發團隊本身也想修改的。而且,由于同一個CSS樣式的定義有不同的實現,也就是意味著瀏覽器內核有兩種運行模式——原生模式和兼容模式,而且更要命的是這兩種模式不是網頁作者可以通過DTD選擇的,必須通過用戶的手動或者某種人工智能算法予以選擇。這種情況下,和直接使用雙核沒有區別。
腳本的語法特性:IE的架構設計上支持多種腳本語言,對JavaScript的語法本身做了一定程度的擴展。如果要兼容IE的行為,對于JavaScript的解析器也要做一定的改動。萬幸的是,VBScript已經用得越來越少了。
IE的擴展模塊:為了方便做網頁,IE也擴展了一些模塊,如:XML數據島技術、HTML Application、Behavior、VML等。如果需要兼容,這些模塊也都是不小的工程。
ActiveX的兼容:國內的網絡銀行等應用使用ActiveX,無論WebKit還是Gecko,使用的插件協議都是nsplugin,而在技術上,實現nsplugin到ActiveX的Wrap是可能的。
渲染順序的兼容:不同瀏覽器對于渲染時間(生成元素的先后順序)有各自的實現,導致某些使用腳本動態創建DOM樹節點的頁面因為找不到對應的頁面元素而報錯。而修改這個行為可能會非常影響內核的渲染速度。
兼容IE特性的反思
遇到不兼容的網頁,常用解決方案往往只有兩個修改網頁或修改瀏覽器。因為國內的歷史網頁實在太多,大家的目光的焦點就都放在修改瀏覽器渲染引擎上了。可這真的正確嗎?
現代瀏覽器是非常復雜的系統軟件。Mozilla開發社區曾經有句名言:“沒人知道Mozilla是什么”,因為Mozilla項目太大了,以至于超過人類個體能夠理解的范圍,某個細節行為的修改,很有可能在意想不到的地方帶來副作用。
從安全方面看,我們說瀏覽器安全或不安全往往是指在針對該瀏覽器的攻擊手段有多少。歷史的經驗也證明了,Firefox成為主流瀏覽器后,爆出的安全漏洞并不比IE少多少。而國產瀏覽器新開發了這些兼容特性后,是否引入了新的安全漏洞是一個值得仔細慎重考慮的問題。
從法律方面,由于軟件專利的存在,IE的某些專有特性,不單是一個軟件的技術規格,更是被美國專利法保護的專利。在國產瀏覽器廠商普遍缺少瀏覽器方面的專利池保護的現狀下,而貿然開發IE的專有功能的兼容模塊,會給自己帶來相當大的法律風險。在周星馳的《功夫》中曾有名言“天下武功,無堅不摧,唯快不破!”歷史遺留的問題就交給歷史解決吧!現今的瀏覽器離給用戶帶來舒適無縫的互聯體驗還差得很遠,與其把資源投入歷史,不如腳踏實地的去改進用戶的瀏覽體驗。“唯創新不敗。
【編輯推薦】