首頁 web前端 js教程 瀏覽器載入、渲染和解析過程黑箱簡析_javascript技巧

瀏覽器載入、渲染和解析過程黑箱簡析_javascript技巧

May 16, 2016 pm 05:47 PM
瀏覽器載入 渲染

用 Fiddler 監控,在 IE6 下,資源下載順序為:
ie6 timeline

很明顯,下載順序從上到下,文檔流中先出現的資源先下載。在 IE8, Safari, Chrome 等瀏覽器下也類似。

Firefox 對下載順序做了最佳化
firefox timeline
Firefox 會將 js, css 提前下載,而將圖片等資源延遲到後面下載。

對於渲染,利用 Fiddler 將網速調慢,可以看到 css 下載後會馬上渲染到頁面,渲染和下載同步進行。 js 的解析和運行,也類似。

對於 js 運行,以及頁面載入相關事件的觸發,特別做了測試。在 Firefox 下,開啟測試頁面:

[22:13:32.947] HTML Start[22:13:32.947] normal inline script run time[22:13:34.904] normal external script run time[22:13:35.775] [body] normal external script run time[22:13:35.789] [body end] normal external script run time[22:13:35.789] HTML End[22:13:35.791] deferred inline script run time[22:13:35.791] deferred external script run time[22:13:35.793] DOMContentLoaded[22:13:38.144] images[0] onload[22:13:38.328] images[1] onload[22:13:39.105] images[2] onload[22:13:39.105] images[3] onload[22:13:39.106] window.onload
登入後複製

很明顯,JS 的運作嚴格按照文檔流程的順序進行。其中 deferred 的腳本會在最後運行(註:Firefox 3.5 開始支援 defer,而且支援得很完美)。

再來看下 IE8,結果如下:

[22:33:56.806] HTML Start[22:33:56.826] normal inline script run time[22:33:57.786] normal external script run time[22:33:57.812] deferred inline script run time[22:33:57.816] document.readyState = interactive[22:33:57.934] [body] normal external script run time[22:33:58.310] [body end] normal external script run time[22:33:58.310] HTML End[22:33:58.346] deferred external script run time[22:33:58.346] images[0].readyState = loading[22:33:58.346] images[0].readyState = complete[22:33:58.346] images[0] onload[22:33:58.361] doScroll[22:33:58.451] images[1].readyState = loading[22:33:58.479] images[1].readyState = complete[22:33:58.479] images[1] onload[22:33:58.794] images[2].readyState = loading[22:33:58.854] images[2].readyState = complete[22:33:58.854] images[2] onload[22:33:58.876] images[3].readyState = loading[22:33:58.876] images[3].readyState = complete[22:33:58.876] images[3] onload[22:33:58.887] document.readyState = complete[22:33:58.888] window.onload
登入後複製

可以看出,IE8 下,defer 只對 external 腳本有效,對 inline 腳本無效。另,與 DOMContentLoaded 最接近的是 doScroll. 這是 doScroll 被廣泛用來模擬 DOMContentLoaded 的原因。小心:只是模擬,細節上並不等價。

還可以得到一個有點意外的結果:放在 body 結束前的腳本,執行時,依舊最好放在 domready 事件中。無論在 Firefox 或 IE 下,解析到 HTML End 時,並不代表 DOM 可以安全操作,特別是當頁面比較複雜時。

從上面資料中,也可以看出 YSlow 效能最佳化法則裡,建議將樣式置頂和腳本置底的根據。

有興趣的可以進一步測試動態添加樣式和腳本的情形,會稍有不同,但沒有特別 surprise.

最後總結下

頁面資源的下載順序是從上到下的,文檔流中先出現的資源先下載(註:存在並發,具體請參考 UA Profiler)。當某一樣式下載完成時,會立刻渲染到頁面(反映了層疊樣式表中層疊在渲染時的意義)。當某一腳本下載完成時,也會立刻解析並執行。腳本的運作嚴格按照文件流程中的順序進行,deferred 的腳本會在正常腳本運作之後執行(Firefox 和 IE 下)。

特別要留意:當腳本執行時,會暫停該腳本之下所有資源的下載(因為腳本可能改變文件流,甚至跳轉頁面,瀏覽器的暫停策略是合理的)。若要小心內嵌腳本,經常會阻塞後續下載。

好了,廢話不多說。以上結果,建議各位親自測試,反覆測試,瘋狂測試,一直到眼花繚亂稀里糊塗恍然大悟繼續糊塗為止……

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

酷家樂怎麼渲染正交俯視圖_酷家樂渲染正交俯視圖教程 酷家樂怎麼渲染正交俯視圖_酷家樂渲染正交俯視圖教程 Apr 02, 2024 pm 01:10 PM

1.首先在酷家樂中開啟要渲染的設計方案。 2、然後在渲染選單下開啟俯視圖渲染。 3.接著在俯視圖渲染介面中點選參數設定中的正交。 4.最後調整好模型角度即可點選立即渲染,渲染正交俯視圖。

vue頁面渲染是同步還是非同步 vue頁面渲染是同步還是非同步 Dec 13, 2022 pm 07:26 PM

vue頁面渲染是異步的。 vue採用的是非同步渲染,這樣可以提升效能;如果不採用非同步更新,在每次更新資料都會對目前元件重新渲染,為了效能考慮,Vue會在本輪資料更新後,再去異步更新視圖。

Vue報錯:無法正確使用v-html渲染動態HTML程式碼,怎麼解決? Vue報錯:無法正確使用v-html渲染動態HTML程式碼,怎麼解決? Aug 19, 2023 pm 12:27 PM

Vue報錯:無法正確使用v-html渲染動態HTML程式碼,怎麼解決?引言:在Vue開發中,我們常常需要動態渲染HTML程式碼,以展示富文本內容或動態產生的使用者輸入。 Vue提供了v-html指令來實現這個功能。然而,有時候我們可能會遇到無法正確使用v-html渲染動態HTML程式碼的問題。本文將探討這個問題的原因,並提供解決方案。問題描述:在Vue中,當我們使用v

Vue報錯:無法正確使用v-html渲染HTML程式碼,怎麼解決? Vue報錯:無法正確使用v-html渲染HTML程式碼,怎麼解決? Aug 26, 2023 am 11:25 AM

Vue報錯:無法正確使用v-html渲染HTML程式碼,怎麼解決? Vue是一款流行的JavaScript框架,可以幫助我們建立互動式的使用者介面。在Vue中,我們可以使用v-html指令將HTML程式碼渲染到模板中。然而,有時我們可能會遇到一個問題:無法正確使用v-html渲染HTML程式碼。本文將介紹一些常見原因和解決方法,幫助您解決這個問題。第一種可能的原因是未

Vue3中的v-for函數:完美解決列表資料渲染 Vue3中的v-for函數:完美解決列表資料渲染 Jun 19, 2023 am 08:04 AM

在Vue3中,v-for被視為渲染清單資料的最佳方式。 v-for是Vue中的一個指令,它允許開發者遍歷一個陣列或對象,並為每個項目產生一段HTML程式碼。 v-for指令是開發者可以使用的最強大的範本指令之一。在Vue3中,v-for指令得到了進一步的最佳化,使用更加簡單,更加靈活。 Vue3中的v-for指令最大的變化是元素的綁定。在Vue2中,使用v-for指令

如何利用Vue實現圖片的分級和渲染處理? 如何利用Vue實現圖片的分級和渲染處理? Aug 19, 2023 pm 07:53 PM

如何利用Vue實現圖片的分級和渲染處理?概述在現代web應用的開發中,圖片的處理是一個非常常見的需求。而利用Vue.js,一個流行的JavaScript框架,實現圖片的分級和渲染處理變得非常簡單和有效率。本文將展示如何透過Vue.js來實現圖片的分級和渲染處理,並附帶程式碼範例。步驟一:建立Vue實例首先,我們需要建立一個Vue實例來管理圖片的資料和邏輯。在HT

觸發回流和重繪:它們的重要性在哪裡? 觸發回流和重繪:它們的重要性在哪裡? Jan 26, 2024 am 08:43 AM

回流和重繪:為什麼它們重要?隨著網路的發展,越來越多的人開始在網路上瀏覽網頁、使用行動應用程式。對於開發者而言,如何提高網頁和應用程式的效能成為重要的主題之一。在優化這些應用過程中,回流和重繪是兩個必須重點關注的面向。本文將詳細介紹回流和重繪的概念,以及為什麼它們對於效能最佳化如此重要。回流和重繪是瀏覽器渲染引擎進行頁面顯示的關鍵步驟。回流指的是當渲染引擎發

重繪與回流:哪一個對渲染階段的影響更為關鍵? 重繪與回流:哪一個對渲染階段的影響更為關鍵? Jan 26, 2024 am 10:16 AM

重繪和回流對渲染階段的影響:誰比較重要?當網頁進行渲染時,瀏覽器會依照一定的順序執行一系列操作,以顯示頁面內容。其中,重繪和回流是渲染過程中的兩個重要步驟。本文將探討重繪和回流對渲染階段的影響,並分析它們的重要性。重繪和回流的含義和差異在了解重繪和回流對渲染的影響之前,我們先來了解它們的意義和差異。重繪(Repaint)是指當元素的樣式發生變化,但並未影響

See all articles