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