HTML5 prefetch

原文地址

聲明:此文帶著自己的理解篮绿,不完全按原文翻譯

prefetch 即預(yù)加載以清,在用戶需要前我們就將所需的資源加載完畢。

有了瀏覽器緩存岛宦,為何還需要預(yù)加載阱佛?

  • 用戶可能是第一次訪問網(wǎng)站帖汞,此時還無緩存
  • 用戶可能清空了緩存
  • 緩存可能已經(jīng)過期,資源將重新加載
  • 用戶訪問的緩存文件可能不是最新的凑术,需要重新加載

Chrome 的預(yù)加載技術(shù)

現(xiàn)在的 chrome 聰明到根據(jù)你的瀏覽記錄翩蘸,預(yù)測到你可能訪問或搜索哪些網(wǎng)站,在你打開網(wǎng)站之前就加載好了一些資源了麦萤。
舉個栗子鹿鳖,當(dāng)你在搜索框輸入 "amaz" 時,它猜測到你可能要訪問 amazon.com壮莹,可能就幫你加載了這個網(wǎng)站的一些資源翅帜。
如果這個預(yù)測算法精準(zhǔn)的話,就能大大地提高用戶的瀏覽體驗了命满。

DNS prefetch

我們知道涝滴,當(dāng)我們訪問一個網(wǎng)站如 www.amazon.com 時,需要將這個域名先轉(zhuǎn)化為對應(yīng)的 IP 地址胶台,這是一個非常耗時的過程歼疮。

DNS prefetch 分析這個頁面需要的資源所在的域名,瀏覽器空閑時提前將這些域名轉(zhuǎn)化為 IP 地址诈唬,真正請求資源時就避免了上述這個過程的時間韩脏。

<meta http-equiv='x-dns-prefetch-control' content='on'>
<link rel='dns-prefetch' >
<link rel='dns-prefetch' >
<link rel='dns-prefetch' >
<link rel='dns-prefetch' >
<link rel='dns-prefetch' >

應(yīng)用場景1:我們的資源存在在不同的 CDN 中,那提前聲明好這些資源的域名铸磅,就可以節(jié)省請求發(fā)生時產(chǎn)生的域名解析的時間赡矢。
應(yīng)用場景2:如果我們知道用戶接下來的操作一定會發(fā)起一起資源的請求,那就可以將這個資源進(jìn)行 DNS-Prefetch阅仔,加強(qiáng)用戶體驗吹散。

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īng)該放到頁面最頂端先加載空民,有最高的優(yōu)先級。

rel='prefetch' 表示當(dāng) subresource 所有資源都加載完后羞迷,開始預(yù)加載這里指定的資源界轩,有最低的優(yōu)先級。

注意:只有可緩存的資源才進(jìn)行預(yù)加載闭树,否則浪費資源耸棒!

Pre render

前面說到的預(yù)解析DNS、預(yù)加載資源已經(jīng)夠強(qiáng)悍了有木有报辱,可還有更厲害的預(yù)渲染(Pre-rendering)与殃!

預(yù)渲染意味著我們提前加載好用戶即將訪問的下一個頁面,否則進(jìn)行預(yù)渲染這個頁面將浪費資源碍现,慎用幅疼!

<link rel='prerender' >

rel='prerender' 表示瀏覽器會幫我們渲染但隱藏指定的頁面,一旦我們訪問這個頁面昼接,則秒開了爽篷!

在 Firefox 中或用 rel='next' 來聲明

<link rel="next" >

不是所有的資源都可以預(yù)加載

當(dāng)資源為以下列表中的資源時,將阻止預(yù)渲染操作:

  • URL 中包含下載資源
  • 頁面中包含音頻慢睡、視頻
  • POST逐工、PUT 和 DELETE 操作的 ajax 請求
  • HTTP 認(rèn)證(Authentication)
  • HTTPS 頁面
  • 含惡意軟件的頁面
  • 彈窗頁面
  • 占用資源很多的頁面
  • 打開了 chrome developer tools 開發(fā)工具

手動觸發(fā)預(yù)渲染操作

在 head 中強(qiáng)勢插入 link[rel='prerender'] 即可:

var hint =document.createElement("link")
hint.setAttribute(“rel”,”prerender”)
hint.setAttribute(“href”,”next-page.html”)
document.getElementsByTagName(“head”)[0].appendChild(hint)

兼容性

這么好用的特性铡溪,當(dāng)然要考慮各瀏覽器的兼容程度了(哭:

IE9 支持 DNS pre-fetching 但管它叫 prefetch。

IE10+ 中 dns-prefetch 和 prefetch 是等價的泪喊。

其他方面的測試棕硫,目前還沒有很好的方案,暫且只能通過查看瀏覽器是否緩存來測試袒啼。

在 Chrome 中打開了 chrome developer tools 開發(fā)工具會阻止頁面的預(yù)渲染哈扮,所以我們看不到這個過程,但可以在 chrome://cache/chrome://net-internals/#prerender 中查看蚓再。

Firefox 可以在 about:cache 中查看滑肉。

警告

這些特定還是實驗性質(zhì)的,將來可能改變摘仅。

權(quán)利越大靶庙,責(zé)任越大,不要濫用实檀!

參考鏈接

html5-prefetch
MDN Controlling DNS prefetching
MDN Link prefetching FAQ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惶洲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子膳犹,更是在濱河造成了極大的恐慌恬吕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件须床,死亡現(xiàn)場離奇詭異铐料,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)豺旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門钠惩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人族阅,你說我怎么就攤上這事篓跛。” “怎么了坦刀?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵愧沟,是天一觀的道長。 經(jīng)常有香客問我鲤遥,道長沐寺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任盖奈,我火速辦了婚禮混坞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己究孕,他們只是感情好啥酱,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厨诸,像睡著了一般懈涛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泳猬,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音宇植,去河邊找鬼得封。 笑死,一個胖子當(dāng)著我的面吹牛指郁,可吹牛的內(nèi)容都是我干的忙上。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闲坎,長吁一口氣:“原來是場噩夢啊……” “哼疫粥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腰懂,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梗逮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绣溜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷彤,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年怖喻,在試婚紗的時候發(fā)現(xiàn)自己被綠了底哗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡锚沸,死狀恐怖跋选,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哗蜈,我是刑警寧澤前标,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站恬叹,受9級特大地震影響候生,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绽昼,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一唯鸭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硅确,春花似錦目溉、人聲如沸明肮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柿估。三九已至,卻和暖如春陷猫,著一層夾襖步出監(jiān)牢的瞬間秫舌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工绣檬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留足陨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓娇未,卻偏偏與公主長得像墨缘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子零抬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容