瀏覽器內核及渲染模式的介紹

     首先要引入一個概念——排版引擎(Layout Engine,Rendering Engine),就是常常上網的人也許都據說過的瀏覽器內核,負責解析網頁語法(如HTML、JavaScript)並渲染、展現網頁各品牌瀏覽器的內核是不一樣的,不一樣的內核處理同一段代碼的時候思路不一樣。所以能夠說,瀏覽器間內核的差別是產生兼容性問題的根本緣由。這就是咱們苦逼前端工程師們常常但願瀏覽器大一統的緣由了。固然這只是個夢,那好咱們迴歸現實,下面我將對四種經常使用的瀏覽器內核進行簡單的介紹。前端

      Trident程序員

      Trident(IE內核):該內核程序在1997年的IE4中首次被採用,是微軟在Mosaic代碼的基礎之上修改而來的,並沿用到IE11,也被廣泛稱做」IE內核」。Trident其實是一款開放的內核,其接口內核設計的至關成熟,所以纔有許多采用IE內核而非IE的瀏覽器(殼瀏覽器)涌現。因爲IE自己的「壟斷性」而使得Trident內核的長期一家獨大,微軟很長時間都並無更新Trident內核,這致使了兩個後果——一是Trident內核曾經幾乎與W3C標準脫節(2005年),二是Trident內核的大量 Bug等安全性問題沒有獲得及時解決,而後加上一些致力於開源的開發者和一些學者們公開本身認爲IE瀏覽器不安全的觀點,也有不少用戶轉向了其餘瀏覽器,Firefox和Opera就是這個時候興起的。非Trident內核瀏覽器的市場佔有率大幅提升也導致許多網頁開發人員開始注意網頁標準和非IE瀏覽器的瀏覽效果問題。國內大部分瀏覽器(好比360)都是「雙核」甚至是「多核」,其中一個內核是Trident,而後再增長一個其餘內核。國內的廠商通常把其餘內核叫作「高速瀏覽模式」,而Trident則是「兼容瀏覽模式」,用戶能夠來回切換。(補充:IE從版本11開始,初步支持WebGL技術。IE8的JavaScript引擎是Jscript,IE9開始用Chakra,這兩個版本區別很大,Chakra不管是速度和標準化方面都很出色。)web

       Gecko算法

       Gecko(Firefox內核):Netscape6開始採用的內核,後來的Mozilla FireFox(火狐瀏覽器) 也採用了該內核,Gecko的特色是代碼徹底公開,所以,其可開發程度很高,全世界的程序員均可覺得其編寫代碼,增長功能。由於這是個開源內核,所以受到許多人的青睞,Gecko內核的瀏覽器也不少,這也是Gecko內核雖然年輕但市場佔有率可以迅速提升的重要緣由。
 
      Presto

      Presto是一個由Opera Software開發的瀏覽器排版引擎,目前Opera 7.0~10.00版本使用該款引擎。Presto的特色就是渲染速度的優化達到了極致,它是目前公認的網頁瀏覽速度最快的瀏覽器內核,然而代價是犧牲了網頁的兼容性。瀏覽器

      Presto 其實是一個動態內核,與Trident、Gecko等內核的最大區別就在於腳本處理上,Presto有着天生的優點,頁面的所有或者部分 都可以在迴應腳本事件時等狀況下被從新解析。此外該內核在執行JavaScript時有着最快的速度,根據同等條件下的測試,Presto內核執行同等 JavaScript所需的時間僅有Trident和Gecko內核的約1/3。不過,不足之處在於Presto是商業引擎,使用Presto的除了 Opera之外,只剩下NDS Browser、Nokia 770網絡瀏覽器等,這在很大程度上限制了Presto的發展。 Opera Widget引擎採用的就是Presto引擎。安全

      Webkit網絡

      Webkit(Safari內核,Chrome內核原型,開源):它是蘋果公司本身的內核,也是蘋果的Safari瀏覽器使用的內核。 Webkit引擎包含WebCore排版引擎及JavaScriptCore解析引擎,均是從KDE的KHTML及KJS引擎衍生而來,它們都是自由軟件,在GPL條約下受權,同時支持BSD系統的開發。因此Webkit也是自由軟件,同時開放源代碼。在安全方面不受IE、Firefox的制約,因此Safari瀏覽器在國內仍是很安全的。
      限於Mac OS X的使用不普遍和Safari瀏覽器曾經只是Mac OS X的專屬瀏覽器,這個內核自己應該說市場範圍並不大;但彷佛根據最新的瀏覽器調查代表,該瀏覽器的市場甚至已經超過了Opera的Presto了——固然這一方面得益於蘋果轉到x86架構以後的人氣暴漲,另外也是由於Safari 3終於推出了Windows版的緣故吧。Mac下還有OmniWeb、Shiira等人氣很高的瀏覽器。
       Google Chrome、360極速瀏覽器以及搜狗瀏覽器高速模式也使用webkit做爲內核(在腳本理解方面,Chrome使用本身研發的V8引擎)。WebKit 內核在手機上的應用也十分普遍,例如 Google 的手機 Gphone、 Apple 的iPhone, Nokia’s Series 60 browser 等所使用的 Browser 內核引擎,都是基於 WebKit。
 
        下面將引入另外一個概念,瀏覽器的工做模式也稱爲「渲染模式」。實際上瀏覽器不一樣的工做模式不只對渲染有影響,對代碼的解析以及腳本的行爲也一樣有影響。
因此說內核相同,渲染模式不一樣也會產生兼容性的問題。讓咱們來看看渲染模式的產生來源:         

       微軟於 2001 年 8 月 27 日發佈的 IE6(Internet Explorer 6)加強了對 CSS1 的兼容,這使得 IE6 對 CSS 的解析及渲染與它的前一個版本 IE5.5 有了很大的差異,如對盒模型的理解、表格尺寸的算法等。前端工程師

       爲了保持良好的向後兼容性,微軟爲用戶提供了一個「開關」,來決定瀏覽器的工做模式,這個「開關」就是頁面頂部的 DTD。
       某些 DTD 將使 IE6 工做在「標準兼容模式」(即「標準模式」),這種模式使用了 IE6 最新的處理方式,包括對 CSS1 的兼容及一些 DHTML 方面的加強。
而另外一些 DTD,包括不設置 DTD 將使 IE6 工做在「向後兼容模式」(即「混雜模式」),這種模式對頁面的處理是與 IE5.5 保持一致的,這樣就能夠保證對一些在 IE5.5 中表現良好的頁面在 IE6 中也能達到一樣的效果。
      微軟在後續推出的 IE七、IE8 中,也使用了上述「開關」,與 IE6 同樣,在 IE七、IE8 的「混雜模式」下,對頁面處理方式仍與 IE5.5 一致。所以能夠說,IE 系列的「混雜模式」,將瀏覽器的行爲凍結在了 IE5.5 這個版本,雖然 IE 各版本的混雜模式也略有區別,但它們的本意都是向後兼容。架構

      隨着時間的推動和標準的進步,IE六、IE7 的「標準模式」逐漸已經變得不夠標準了,2009年3月19日發佈的 IE8 從新定義了「標準模式」,再次加強了對標準規範的支持,同時爲了保持對 IE7 的兼容,IE8 增長了一種工做模式:「接近標準模式」。因而,IE8 的工做模式就分紅了三種:「標準模式」、「接近標準模式」和「混雜模式」。ide

      目前全部主流瀏覽器對於向後兼容問題的處理都與 IE 系列同樣,提供了不一樣的模式來保證向後兼容。

      瀏覽器的工做模式就是在這種背景下誕生的,它很好的解決了瀏覽器對標準支持上的不斷加強及對一些錯誤的修復而致使的向後兼容問題,但也將瀏覽器在不一樣狀況下的表現及行爲變得更加複雜多樣。

      經過以上的內容,咱們能夠得出結論:若是一個頁面能使各瀏覽器都工做在「標準模式」下,那麼各瀏覽器都將盡可能兼容標準,所以各瀏覽器之間表現出的差別是不多的。相反,若是一個頁面使各瀏覽器都工做在「混雜模式」下,那麼各瀏覽器都將盡可能向後兼容,所以各瀏覽器之間表現出的差別將會最大化。

附錄: 一些常見的 doctype
      
        在編寫一個頁面時,要使用能夠觸發各瀏覽器「標準模式」的DTD,並書寫符合規範的代碼,以保證您的頁面在各瀏覽器中能夠最大程度的兼容。相信你們看了這些會對瀏覽器的兼容性有更深入的瞭解,最起碼知道那些萬惡bug的來源了。
相關文章
相關標籤/搜索