詳解HTML5中rel屬性的prefetch預(yù)加載功能使用
在HTML5中,有個(gè)很有用但常被忽略的特性,就是預(yù)先加載(prefetch),它的原理是:
利用瀏覽器的空閑時(shí)間去先下載用戶指定需要的內(nèi)容,然后緩存起來(lái),這樣用戶下次加載時(shí),就直接從緩存中取出來(lái),效率就快了.
舉個(gè)例子說(shuō)明:比如要預(yù)先加載某個(gè)頁(yè)面,可以這樣:
- <link rel="prefetch" href="http://www.example.com/"> <!-- Firefox -->
但如果是google的話,要用另外的一個(gè)名稱,即:
- <link rel="prerender" href="http://www.example.com/"> <!-- Chrome -->
即使在不支持的瀏覽器,用了這個(gè)特性其實(shí)是不會(huì)出錯(cuò)的,只不過瀏覽器解析不到而已,
所以,如果你感覺能有辦法預(yù)先預(yù)測(cè)到用戶期望點(diǎn)的頁(yè)面(比如用戶看最新的受歡迎的熱圖,他 可能看了第一頁(yè)后,會(huì)繼續(xù)看下一頁(yè),這個(gè)時(shí)候就可以用預(yù)先加載這個(gè)特性了).比如
- <link rel="prefetch" href="<?php echo get_next_posts_page_link(); ?>">
而單獨(dú)取一張圖片也是可以的,比如:
- <link rel="prefetch" href="/images/test.jpg"/>
有了瀏覽器緩存,為何還需要預(yù)加載?
1.用戶可能是第一次訪問網(wǎng)站,此時(shí)還無(wú)緩存
2.用戶可能清空了緩存
3.緩存可能已經(jīng)過期,資源將重新加載
4.用戶訪問的緩存文件可能不是最新的,需要重新加載
5.Chrome 的預(yù)加載技術(shù)
現(xiàn)在的 chrome 聰明到根據(jù)你的瀏覽記錄,預(yù)測(cè)到你可能訪問或搜索哪些網(wǎng)站,在你打開網(wǎng)站之前就加載好了一些資源了。
舉個(gè)栗子,當(dāng)你在搜索框輸入 "amaz" 時(shí),它猜測(cè)到你可能要訪問 amazon.com,可能就幫你加載了這個(gè)網(wǎng)站的一些資源。
如果這個(gè)預(yù)測(cè)算法精準(zhǔn)的話,就能大大地提高用戶的瀏覽體驗(yàn)了。
DNS prefetch
我們知道,當(dāng)我們?cè)L問一個(gè)網(wǎng)站如 www.amazon.com 時(shí),需要將這個(gè)域名先轉(zhuǎn)化為對(duì)應(yīng)的 IP 地址,這是一個(gè)非常耗時(shí)的過程。
DNS prefetch 分析這個(gè)頁(yè)面需要的資源所在的域名,瀏覽器空閑時(shí)提前將這些域名轉(zhuǎn)化為 IP 地址,真正請(qǐng)求資源時(shí)就避免了上述這個(gè)過程的時(shí)間。
- <meta http-equiv='x-dns-prefetch-control' content='on'>
- <link rel='dns-prefetch' href='http://g-ecx.images-amazon.com'>
- <link rel='dns-prefetch' href='http://z-ecx.images-amazon.com'>
- <link rel='dns-prefetch' href='http://ecx.images-amazon.com'>
- <link rel='dns-prefetch' href='http://completion.amazon.com'>
- <link rel='dns-prefetch' href='http://fls-na.amazon.com'>
應(yīng)用場(chǎng)景1:我們的資源存在在不同的 CDN 中,那提前聲明好這些資源的域名,就可以節(jié)省請(qǐng)求發(fā)生時(shí)產(chǎn)生的域名解析的時(shí)間。
應(yīng)用場(chǎng)景2:如果我們知道用戶接下來(lái)的操作一定會(huì)發(fā)起一起資源的請(qǐng)求,那就可以將這個(gè)資源進(jìn)行 DNS-Prefetch,加強(qiáng)用戶體驗(yàn)。
Resource prefetch
在 Chrome 下,我們可以用 link標(biāo)簽聲明特定文件的預(yù)加載:
- <link rel='subresource' href='critical.js'>
- <link rel='subresource' href='main.css'>
- <link rel='prefetch' href='secondary.js'>
在 Firefox 中或用 meta 標(biāo)簽聲明:
- <meta http-equiv="Link" content="<critical.js>; rel=prefetch">
rel='subresource' 表示當(dāng)前頁(yè)面必須加載的資源,應(yīng)該放到頁(yè)面最頂端先加載,有最高的優(yōu)先級(jí)。
rel='prefetch' 表示當(dāng) subresource 所有資源都加載完后,開始預(yù)加載這里指定的資源,有最低的優(yōu)先級(jí)。
注意:只有可緩存的資源才進(jìn)行預(yù)加載,否則浪費(fèi)資源!
Pre render
前面說(shuō)到的預(yù)解析DNS、預(yù)加載資源已經(jīng)夠強(qiáng)悍了有木有,可還有更厲害的預(yù)渲染(Pre-rendering)!
預(yù)渲染意味著我們提前加載好用戶即將訪問的下一個(gè)頁(yè)面,否則進(jìn)行預(yù)渲染這個(gè)頁(yè)面將浪費(fèi)資源,慎用!
- <link rel='prerender' href='http://www.pagetoprerender.com'>
rel='prerender' 表示瀏覽器會(huì)幫我們渲染但隱藏指定的頁(yè)面,一旦我們?cè)L問這個(gè)頁(yè)面,則秒開了!
在 Firefox 中或用 rel='next' 來(lái)聲明
- <link rel="next" href="http://www.pagetoprerender.com">
不是所有的資源都可以預(yù)加載
當(dāng)資源為以下列表中的資源時(shí),將阻止預(yù)渲染操作:
1.URL 中包含下載資源
2.頁(yè)面中包含音頻、視頻
3.POST、PUT 和 DELETE 操作的 ajax 請(qǐng)求
4.HTTP 認(rèn)證(Authentication)
5.HTTPS 頁(yè)面
6.含惡意軟件的頁(yè)面
7.彈窗頁(yè)面
8.占用資源很多的頁(yè)面
9.打開了 chrome developer tools 開發(fā)工具
手動(dòng)觸發(fā)預(yù)渲染操作
在 head 中強(qiáng)勢(shì)插入 link[rel='prerender'] 即可:
- var hint =document.createElement("link")
- hint.setAttribute(“rel”,”prerender”)
- hint.setAttribute(“href”,”next-page.html”)
- document.getElementsByTagName(“head”)[0].appendChild(hint)
相關(guān)文章

html5基于鼠標(biāo)滾動(dòng)控制植樹生長(zhǎng)動(dòng)畫特效源碼
這是一款html5基于鼠標(biāo)滾動(dòng)控制植樹生長(zhǎng)動(dòng)畫特效源碼,伴隨著鼠標(biāo)滾輪的滾動(dòng)可呈現(xiàn)出樹木生長(zhǎng)的動(dòng)畫效果。整體動(dòng)畫漸變效果流暢自然2016-05-13- 下面小編就為大家?guī)?lái)一篇【HTML5】Canvas繪制簡(jiǎn)單圖片教程。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧,祝大家游戲愉快哦2016-05-13
HTML5實(shí)現(xiàn)頁(yè)面切換激活的PageVisibility API使用初探
這篇文章主要介紹了HTML5實(shí)現(xiàn)頁(yè)面切換激活的PageVisibility API使用初探,PageVisibility可以使我們?cè)谇袚Q瀏覽器tab頁(yè)面時(shí)自動(dòng)停止和播放視頻,需要的朋友可以參考下2016-05-13HTML5的Geolocation地理位置定位API使用教程
地理位置(Geolocation)是 HTML5 的重要特性之一,提供了確定用戶位置的功能,借助這個(gè)特性能夠開發(fā)基于位置信息的應(yīng)用,今天這篇文章就向大家介紹一下HTML5的Geolocation地理2016-05-12HTML5中的強(qiáng)制下載屬性download使用實(shí)例解析
鏈接中加入download屬性可以使用戶將文件下載下來(lái)而不是直接用瀏覽器打開,截止到目前為止對(duì)HTML5提供支持的瀏覽器已經(jīng)對(duì)這個(gè)屬性支持得比較好了,下面我們就來(lái)詳細(xì)看一下HTM2016-05-12- 下面小編就為大家?guī)?lái)一篇HTML5事件方法全部匯總。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來(lái)看看吧2016-05-12
HTML5全屏響應(yīng)式縮放切換幻燈片代碼是一款切換的時(shí)候當(dāng)前slide會(huì)平滑縮小并移動(dòng),下一個(gè)slide會(huì)從縮小狀態(tài)逐漸放大并移動(dòng)到屏幕中間,效果不錯(cuò)。需要的朋友前來(lái)下載源碼哦2016-05-10
html5 canvas實(shí)現(xiàn)的“我們要發(fā)財(cái)了”游戲源碼
這是一款基于html5 canvas實(shí)現(xiàn)的“我們要發(fā)財(cái)了”游戲源碼。運(yùn)行該源碼按照游戲規(guī)則找到鑰匙打開寶箱即可獲得勝利,游戲中的小人使用鍵盤的方向鍵控制2016-05-10
html5實(shí)現(xiàn)的仿網(wǎng)頁(yè)版微信聊天界面效果源碼
這是一款基于html5實(shí)現(xiàn)的仿網(wǎng)頁(yè)版微信聊天界面效果源碼,可實(shí)現(xiàn)微信網(wǎng)頁(yè)版聊天界面效果,在編輯框編輯文字之后按Ctrl+Enter鍵即可提交文字到聊天對(duì)話框上2016-05-09
html5 canvas實(shí)現(xiàn)的3D飛行飛行動(dòng)畫特效源碼
這是一款基于html5 canvas實(shí)現(xiàn)的3D飛行飛行動(dòng)畫特效源碼,其中3D飛行的飛機(jī)使用了Three.js插件,3D庫(kù)使WebGL的簡(jiǎn)單實(shí)現(xiàn)。且飛機(jī)動(dòng)畫效果還可響應(yīng)鼠標(biāo)實(shí)現(xiàn)移動(dòng)與遠(yuǎn)景近景等2016-05-05






