瀏覽器的組成

2022-09-13 11:30:15 字數 2075 閱讀 7498

瀏覽器的核心分為兩個部分:渲染引擎和j**ascript直譯器(引擎)

1、渲染引擎:

主要作用:將網頁**渲染為使用者視覺效果可以感知的平面文件

firefox:gecko引擎

safari:webkit引擎

chrome:blink引擎

ie:trident引擎

edge:edgehtml引擎

2、重流和重繪:

渲染樹轉換為網頁布局,稱為「布局流」(flow),布局顯示到頁面的這個過程,成為「繪製」(paint)。它們都具有阻塞效應。並且會耗費很多時間和計算資源。頁面生成以後,指令碼操作和樣式表操作,都會觸發「重流」(reflow)和「重繪」(repaint)。使用者的互動也會觸發重流和重繪,比如設定了滑鼠懸停(a:hover)效果、滾動、在輸入框中輸入文字、改變視窗大小等等。

重流和重繪並不一定會一起發生,重流必定導致重繪,重繪不一定需要發生重流。比如改變元素顏色,只會導致重繪,而不會導致重流;簡單的來說,改變元素的布局,則會發生重流,也就是對布局流做重新的計算。當然也會發生重繪。

大多數情況下,瀏覽器會智慧型判斷,將重流和重繪只限制到相關的子樹,最小化所耗費的代價,而不會全域性重新生成網頁。

作為開發者,應該盡量設法降低重繪的次數和成本。比如,盡量不要變動高層的dom元素,而以底層dom元素的變動替代;再比如,重繪table布局和flex布局,開銷都會比較大。當然瀏覽器也會積累dom變動,然後一次執行。

關於減少重繪的優化技巧:

1、讀取dom或者寫入dom的操作,盡量寫在一起,不要混雜。即不要讀取乙個節點,立即修改這個節點,接著再讀取乙個dom節點。

2、快取dom資訊。

3、不要一項一項地改變樣式,而使用css class一次性的改變樣式。

4、使用documentfragment操作dom。

5、動畫使用absolute定位或fixed定位,這樣可以減少對其他元素的影響。

6、只在必要的時候顯示隱藏元素。

7、使用window.requestanimationframe(),因為他可以把**推遲到下一次重流執行,而不是立即要求頁面重流。

8、使用虛擬dom(virtual dom)庫。這樣的方式還可以簡化節點的操作和繼承層次。現在很多框架都採用這種方式。

3、j**ascript引擎:

主要作用:讀取網頁中的j**ascript**,對其進行處理並執行。

j**ascript是一種解釋型語言,也就是它不需要編譯,有直譯器實時執行。這樣的好處是執行和修改都比較方便,重新整理頁面皆可以重新解釋執行;缺點是每次執行都需要重新呼叫直譯器,系統開銷較大,執行速度慢於編譯型語言。為了提高執行速度,目前瀏覽器都j**ascript進行一定程度的編譯,生成類似位元組碼(bytecode)的中間**,以提高執行速度。

早期瀏覽器對j**ascript處理分為以下幾個階段:(即編譯原理)

1、讀取**,進行詞法分析(lexical),將**分解成詞元(token)。

2、對詞元進行語法分析(parsing),將**整理成「語法樹」(syntax tree)。

3、進行語義分析,使用「翻譯器」將**轉為位元組碼(bytecode)。

4、使用「位元組碼直譯器」(bytecode interpreter)將位元組碼轉換成機器碼。

但是,逐行解釋將位元組碼轉換成機器碼,是很低的效率。為了提高執行速度,現代瀏覽器改為採用「即時編譯」(just in time compiler,縮寫jit),即位元組碼只在執行時編譯,用到哪一行就編譯哪一行,並且把編譯結果快取(inline cache)。通常,乙個程式被經常用到的,只是其中一小部分**,有了快取的編譯結果,整個程式的執行速度就會提公升。位元組碼不能直接執行,而是執行在乙個虛擬機器之上(virtual machine)之上,一般也把虛擬機器成為j**script引擎。並非所有的js引擎都是將位元組碼編譯成機器碼執行的,有的引擎是基於原始碼編譯成機器碼執行,即只要有可能,就直接通過jit編譯器將原始碼編譯成機器碼執行,省略位元組碼步驟。這一點與其他採用虛擬機器的語言不相同(j**a等)。這樣做的目的,只為了盡可能的優化**,提高效能。下面介紹現代最常見的js引擎:

1、ie:chakra

2、safari: nitro、j**ascript core

3、opera:carakan

4、chrome:v8

JS高階之瀏覽器組成(主流瀏覽器及其核心)

1.分為shell 外殼 部分和核心部分 外殼 使用者介面 使用者可操作的部分 比如前進後退重新整理,右鍵選單等等 渲染引擎 即繪製,主要負責html css的語法識別和繪製 js引擎 負責讀取和執行js 瀏覽器引擎 查詢操作渲染引擎的介面 網路 network 如http的請求 ui後端 繪製類似...

瀏覽器位址列的組成部分

舉例 第一部分 http http即資料傳輸協議。協議是一種規範或標準,需要按照這個標準進行資料傳輸,如果不加,瀏覽器不會執行資料傳輸。第二部分 127.0.0.1 8848 主機 ip 網域名稱 埠號 127.0.0.1 ip 網域名稱 8848 埠號 區分同一臺電腦上多個服務 第三部分 web2...

瀏覽器 瀏覽器高效搜尋

一 常見場景 以場景的形式來說明 1 場景1 網路上查詢一本書的 指定文件型別 如pdf 如 搜尋關鍵字 c primer plus 的 pdf 版本 輸入 格式 關鍵字 空格 filetype pdf 例項 c primer plus中文版 filetype pdf關鍵字 filetype 2 場...