摘要:值得注意的是,谷歌瀏覽器和大多數(shù)瀏覽器不同,每一個選項卡都是渲染引擎的一個實例,都擁有獨立的進程。組件之間的通信火狐和谷歌都發(fā)展了一個特殊的通信結構,后面我們將會多帶帶來講。渲染引擎我們所討論的幾款瀏覽器火狐谷歌都是基于兩種渲染引擎建立的。
寫在前面
這篇文章是一篇譯文,年代有點久,部分內(nèi)容有過時,請讀者仔細閱讀,翻譯自“How browser work”,原文地址為點擊這里查看原文
簡介web瀏覽器可能是我們使用最廣的軟件了。在這篇文章中我將會詳細介紹一下瀏覽器在背后究竟是如何工作的。我們將會知道,在你在地址欄鍵入“google.com”到瀏覽器呈現(xiàn)頁面的這段時間內(nèi),究竟發(fā)生了什么。
我們將會探討的瀏覽器
如今我們常用的瀏覽器主要有5種:IE、Firefox、Safari、Chrome以及Opera。我們將會以開源瀏覽器Firefox、Chrome和Safari(部分開源)為例,據(jù)W3C瀏覽器相關統(tǒng)計,以上三種瀏覽器占比大概有60%(2009 年 10月)。由此可見,現(xiàn)如今開源的瀏覽器已經(jīng)占據(jù)瀏覽器市場的大部分了。
瀏覽器主要功能
瀏覽器主要的功能是通過向服務器請求,來獲取你所想要的網(wǎng)絡資源,并將它渲染到瀏覽器窗口中。而資源類型通常是html文件,但也可能是PDF,圖片或者是其他類型的資源。資源地址通常是由用戶鍵入的URI(統(tǒng)一資源標識符)來決定的。更多內(nèi)容在以下網(wǎng)絡部分會講到。
瀏覽器渲染解讀html文件是依據(jù)定義好的html結構以及css樣式。這些規(guī)則描述主要是由W3C組織來制定的?,F(xiàn)在的html的版本是4,版本5正在規(guī)劃準備中。而css的版本是2,同樣的,css3也正在規(guī)劃。
很多年以來,各種瀏覽器只有部分是遵從標準的,同時各個瀏覽器廠商都發(fā)展了他們自己獨有的東西。這給web開發(fā)者帶來了很多兼容性問題。如今多數(shù)瀏覽器或多或少會遵從標準。
在用戶界面上,各個瀏覽器之間還是有很多相似之處的。比如說:
地址欄用于鍵入URI
回退和前進按鈕
書簽選項
用于刷新和停止的按鈕
主頁按鈕
令人詫異的是,沒有任何正式的規(guī)范指定用戶界面,這只是多年經(jīng)驗和瀏覽器相互模仿形成的良好習慣。HTML5規(guī)范不定義瀏覽器必須具備的UI元素,但列出了一些常見元素。如地址欄、狀態(tài)欄、工具欄等。當然,像Firefox下載管理器這樣的功能,是獨有的。
更多相關內(nèi)容我們在用戶界面部分再介紹。
瀏覽器深層結構
用戶界面-包括了地址欄、返回前進按鈕、書簽菜單等。在每一個請求頁內(nèi),你都可以看到這些UI組件,除了主窗口。
瀏覽器引擎-用來查詢和操作渲染引擎的接口
渲染引擎-負責渲染請求的內(nèi)容。比如,若果請求的資源是html文件,那么渲染引擎負責解析html以及css,然后再把結果渲染到頁面。
網(wǎng)絡連接-用于處理網(wǎng)絡請求,如http請求。它不依賴不同的平臺,這意味著它可以在不同平臺工作。
UI后臺-用于渲染基礎部件,如多選框、窗口等。它暴露了一個不是特定平臺的通用接口,在底層調(diào)用了操作系統(tǒng)的用戶接口。
js引擎-用于解析javascript代碼
數(shù)據(jù)存儲-這是一個持久層。瀏覽器需要在硬盤中存儲各式數(shù)據(jù),比如cookie。HTML5定義了‘web database’這樣輕量級的web瀏覽器存儲技術。
值得注意的是,谷歌瀏覽器和大多數(shù)瀏覽器不同,每一個選項卡都是渲染引擎的一個實例,都擁有獨立的進程。我將會對以上每個組件都寫一個章節(jié)來講解。
組件之間的通信
火狐和谷歌都發(fā)展了一個特殊的通信結構,后面我們將會多帶帶來講。
渲染引擎說到渲染引擎的責任,好吧,所謂渲染,就是將請求到的內(nèi)容展現(xiàn)在瀏覽器屏幕上。
默認情況下,渲染引擎會將HTML和XMl文檔以及圖片展示出來。當然,通過一些插件(瀏覽器擴展),渲染引擎也能夠展現(xiàn)其它類型的文檔。舉例來說,用PDF擴展,渲染引擎可以展現(xiàn)PDF文檔。我們會多帶帶拿一章篇幅來介紹瀏覽器插件和擴展。在這章里,我們會把重點放在最主要的情況:渲染用CSS修飾的HTML和圖片。
渲染引擎
我們所討論的幾款瀏覽器-火狐、谷歌、Safari都是基于兩種渲染引擎建立的?;鸷褂玫氖荊ecko-一種Mozilla自主研發(fā)的渲染引擎。Safari和谷歌都是使用Webkit渲染引擎。
Webkit是開源的,它一開始是作為Linux平臺上的引擎,經(jīng)過蘋果公司改良后支持了Mac和Windows平臺。詳情請參閱這里
主要流程
渲染引擎將會先通過網(wǎng)絡獲取請求的文檔內(nèi)容,這不操作通常以8k分塊的方式完成。
以下是渲染引擎拿到數(shù)據(jù)后主要的工作流程:
解析HTML并構建DOM樹 => 構建render樹 => render樹布局 => render樹繪制
渲染引擎開始解析HTML文檔,并把標簽轉(zhuǎn)化成內(nèi)容樹中的DOM節(jié)點。同時它也開始解析樣式數(shù)據(jù),外鏈的css文件以及style標簽內(nèi)的樣式。所有這些樣式數(shù)據(jù)以及HTML中的可見性指令都是用來創(chuàng)建另一棵樹--render 樹。
render樹由一些包含顏色、尺寸等視覺屬性的小方塊組成。這些小方塊將會按照正確的順序顯示在屏幕上。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82531.html
摘要:每種可解析的格式必須具有由詞匯及語法規(guī)則組成的特定的文法,這被稱為上下文無關文法。解析器將會從詞法分析器獲取一個新符號,并且嘗試用某一種語法規(guī)則去匹配它。第二個匹配到規(guī)則的是,它匹配到第三條語法規(guī)則。 銜接 接著上文繼續(xù)。 在構建好render樹后,瀏覽器就開始進行布局了。這意味著瀏覽器會給每個節(jié)點正確的坐標,讓它們出現(xiàn)在該出現(xiàn)的地方。下一步就是進行繪制了,瀏覽器將會遍歷render樹...
摘要:主題來自于的典型面試問題列表。有多種方法來處理事件委托。這種方法的缺點是父容器的偵聽器可能需要檢查事件來選擇正確的操作,而元素本身不會是一個監(jiān)聽器。 showImg(http://fw008950-flywheel.netdna-ssl.com/wp-content/uploads/2014/11/Get-Hired-Fast-How-to-Job-Search-Classifieds...
摘要:絕對底部前端掘金來自國外的設計達人,純,可以實現(xiàn)當正文內(nèi)容很少時,底部位于窗口最下面。有效解決圖片使用單位邊角缺失的問題前端掘金起因在移動端使用布局時圖片也需要用單位。 CSS 絕對底部 - 前端 - 掘金來自國外的設計達人,純CSS,可以實現(xiàn): 當正文內(nèi)容很少時,底部位于窗口最下面。當改變窗口高度時,不會出現(xiàn)重疊問題。甚至,創(chuàng)造該CSS的人還專門成立一個網(wǎng)站介紹這個CSS底部布局方案...
閱讀 719·2021-09-24 09:48
閱讀 2516·2021-08-26 14:14
閱讀 543·2019-08-30 13:08
閱讀 1475·2019-08-29 15:22
閱讀 3112·2019-08-29 11:06
閱讀 1029·2019-08-26 18:26
閱讀 1133·2019-08-26 13:53
閱讀 2605·2019-08-26 12:21