發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
它并不是一門新技術(shù),有人認(rèn)為只有 Chrome 才具備這個(gè)功能。也有人認(rèn)為它是有史以來(lái)提升瀏覽器性能最有效的方法。如果你第一次接觸預(yù)加載器,也許心中已經(jīng)有了無(wú)數(shù)個(gè)問(wèn)號(hào)。什么是預(yù)加載器?它是如何提升瀏覽器性能的?
一個(gè)網(wǎng)頁(yè)的加載依賴于腳本文件、CSS樣式文件。讓我們看看瀏覽器加載網(wǎng)頁(yè)的過(guò)程。
即使瀏覽器可以并行執(zhí)行多個(gè)請(qǐng)求,但是無(wú)法與針對(duì)腳本文件的操作并行執(zhí)行。
可以通過(guò)IE7打開(kāi)鏈接中的網(wǎng)頁(yè)進(jìn)行測(cè)試。我們可以看到,網(wǎng)頁(yè)head標(biāo)簽內(nèi)包含2個(gè)樣式文件和2個(gè)腳本文件。在body中,包含3個(gè)圖片、1個(gè)腳本文件。
通過(guò)瀑布流我們可以查看資源加載的過(guò)程:
腳本文件的下載和執(zhí)行,會(huì)阻斷其他資源文件的下載,無(wú)疑將大大降低瀏覽器性能。
2008 年,IE、WebKit和Mozilla都實(shí)現(xiàn)了預(yù)加載器功能,來(lái)提升網(wǎng)絡(luò)的利用率,改善腳本文件對(duì)其他資源文件的阻塞現(xiàn)狀。
當(dāng)瀏覽器被腳本文件阻塞時(shí),另一個(gè)輕量級(jí)的解析器會(huì)繼續(xù)瀏覽剩余的標(biāo)記,尋找需要下載的資源i.e. 樣式文件, 腳本文件,圖片 等。
一旦發(fā)現(xiàn),預(yù)加載器既可以在后臺(tái)開(kāi)始接收這些資源,等待主解析器完成當(dāng)前的腳本操作,其他資源已經(jīng)完成下載,這樣就減輕了腳本阻塞帶來(lái)的性能損耗。
下面這個(gè)瀑布流是使用IE8打開(kāi)鏈接中網(wǎng)頁(yè)的結(jié)果,性能有顯著的提升:IE8=7S > IE7=14S。
預(yù)加載功能仍然是各大瀏覽器廠商樂(lè)此不疲的實(shí)驗(yàn)領(lǐng)域。很多瀏覽器嘗試設(shè)置資源下載的優(yōu)先級(jí)。例如,Safari降低了不作用于當(dāng)前視圖區(qū)域樣式文件的優(yōu)先級(jí)。Chrome 則設(shè)置腳本文件的優(yōu)先級(jí)高于圖片,即使腳本文件位于HTML底部。
預(yù)加載器只能檢索HTML標(biāo)簽中的URL,無(wú)法檢測(cè)到使用腳本代碼添加的URL,直至腳本代碼執(zhí)行時(shí)才可以獲取這類資源。
我曾經(jīng)遇到過(guò)一個(gè)通過(guò)javascript判斷當(dāng)前Window寬度,進(jìn)而決策加載CSS樣式文件的例子。預(yù)加載器無(wú)法識(shí)別此類資源。
<html> <head> <script> var file = window.innerWidth < 1000 ? "mobile.css" : "desktop.css"; document.write('<link rel="stylesheet" type="text/css" href="css/' + file + '"/>'); </script> </head> <body> <img src="img/gallery-img1.jpg" /> <img src="img/gallery-img2.jpg" /> <img src="img/gallery-img3.jpg" /> <img src="img/gallery-img4.jpg" /> <img src="img/gallery-img5.jpg" /> <img src="img/gallery-img6.jpg" /> </body> </html>
上面這段代碼可以輕松的騙過(guò)IE9的預(yù)加載機(jī)制,在下面的瀑布流中我們可以看到,加載圖片占用了所有的連接,直至第一個(gè)圖片加載完成后,CSS文件才開(kāi)始下載。
當(dāng)前,有幾種方式來(lái)控制預(yù)加載器的加載順序(使用javacript隱藏資源文件既是其中一種),同時(shí),W3C Resource Priorities 中也提供兩個(gè)特性來(lái)影響預(yù)加載器。
lazyload : 直至沒(méi)有被標(biāo)記為lazyload 資源下載完畢后才下載被標(biāo)記資源。
postpone: 資源在對(duì)最終用戶可見(jiàn)之后才開(kāi)始下載。i.e. 標(biāo)簽的display屬性被設(shè)置為 none。
預(yù)讀取(Pre-fetching)可以通知瀏覽器哪些資源可能會(huì)在未來(lái)的某一時(shí)機(jī),在當(dāng)前頁(yè)面或者其他頁(yè)面中使用。
下面是預(yù)讀取的一個(gè)簡(jiǎn)單的應(yīng)用,通知瀏覽器為將要訪問(wèn)的其他站點(diǎn)加載資源:
<link rel="dns-prefetch" href="other.hostname.com">
Chrome允許我們預(yù)先通知瀏覽器加載未來(lái)會(huì)用到的資源,被聲明的資源將以較高的優(yōu)先級(jí)被下載。
<link rel="subresource" href="/some_other_resource.js">
(Chromium 源碼中提到,被標(biāo)記為subresource的資源下載的優(yōu)先級(jí)低于樣式文件和腳本文件,但不低于圖片加載優(yōu)先級(jí))
還有標(biāo)記可以通知瀏覽器哪些文件是較低級(jí)別的預(yù)讀取文件。
預(yù)讀取未來(lái)將被使用的獨(dú)立資源文件。
<link rel="prefetch" href="/some_other_resource.jpeg">
通過(guò)預(yù)讀取方式,在后臺(tái)渲染整個(gè)頁(yè)面。
<link rel="prerender" >
預(yù)加載不是一門新技術(shù),它對(duì)提高瀏覽器性能具有紀(jì)念意義,我們不需要做任何操作既可以使用預(yù)加載。
它廣泛應(yīng)用,我測(cè)試了以下瀏覽器,都具有預(yù)加載功能:
Bruce Lawson(Opera公司總裁)也宣布Opera Mini 同樣支持預(yù)加載。
來(lái)自: 昵稱10504424 > 《工作》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
性能工具
輸入 URL 地址,即可測(cè)試頁(yè)面加載速度,分析并找出性能瓶頸。對(duì)于移動(dòng)用戶來(lái)說(shuō),他們希望網(wǎng)站在手機(jī)上加載起來(lái)要快于電腦,如果感到加載...
SingleFile
單擊功能按鈕即可保存當(dāng)前標(biāo)簽頁(yè),至于要下載選取的部分、非固定標(biāo)簽頁(yè)或所有頁(yè)面,只要在按鈕上單擊右鍵就能看到選單,或者在網(wǎng)頁(yè)上單...
data url簡(jiǎn)介及data url的利弊 | 盛夏光年
data url簡(jiǎn)介及data url的利弊 | 盛夏光年。幾乎所有的現(xiàn)代瀏覽器都支持Data URL格式,包括火狐瀏覽器,谷歌瀏覽器,Safari瀏覽器,oper...
雙核瀏覽器和谷歌瀏覽器哪個(gè)好
大家在網(wǎng)上下載谷歌瀏覽器的時(shí)候,會(huì)發(fā)現(xiàn)有谷歌雙核瀏覽器和谷歌瀏覽器之分,很多用戶可能會(huì)覺(jué)得一樣,其實(shí)兩者是不同的,谷歌瀏覽器是...
讓你的瀏覽器加載網(wǎng)頁(yè)速度提升3倍
讓你的瀏覽器加載網(wǎng)頁(yè)速度提升3倍瀏覽器在加載網(wǎng)頁(yè)時(shí)會(huì)下載網(wǎng)頁(yè)中的組件(如圖片、CSS 文件、Java script 文件、Flash 文件等),提升瀏覽器加載網(wǎng)頁(yè)速度的一個(gè)思路就是想法加快下載組件的速度。這意...
奇技淫巧!玩轉(zhuǎn)Chrome瀏覽器。
玩轉(zhuǎn)Chrome瀏覽器。十分軟件 2022-03-18 10:30收錄于話題#chrome3個(gè)。今天再舉兩個(gè)例子,見(jiàn)識(shí)一下Chrome的奇淫技巧。89購(gòu)買網(wǎng)頁(yè)另存為單...
stylish,userchromejs,greasemonkey 介紹與使用
stylish,userchromejs,greasemonkey 介紹與使用Firefox 默認(rèn)支持四個(gè)有超強(qiáng)自定義能力的文件,位于配置文件夾下的chrome文件夾里,分別是: UserChrome.css -瀏覽器界面的樣式表 UserContent.css -...
網(wǎng)頁(yè)布局
網(wǎng)頁(yè)布局網(wǎng)頁(yè)布局常見(jiàn)的有三種方式:1,frameset2,table3,div+css----------------------------------------------------------------------------------------------------------------------------...
CSS加載失敗的6個(gè)原因
有很多剛剛接觸css的新手有時(shí)會(huì)遇到css加載失敗這個(gè)問(wèn)題,但測(cè)試時(shí),網(wǎng)頁(yè)上沒(méi)有顯示該樣式的問(wèn)題,這就說(shuō)明CSS加載失敗了。出現(xiàn)這種狀況一般是因?yàn)榈腸ss路徑書寫錯(cuò),或者是在瀏覽器中禁止掉了css的加載...
微信掃碼,在手機(jī)上查看選中內(nèi)容