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


















