preload對比prefetch的功能區(qū)別詳解
一、前言
在使用@vue/cli工具構(gòu)建的項目,打包上線之后,一般都能看到<link rel="preload">和<link rel="prefetch">這樣的標(biāo)簽,對于preload與prefetch的作用和區(qū)別一直以來都不是太了解,所以文本就詳細(xì)介紹一下。
想要了解preload與prefetch的作用和區(qū)別,就不得不先熟悉瀏覽器加載資源的優(yōu)先級。
如圖:
- 其中HTML基本骨架結(jié)構(gòu)和CSS的優(yōu)先級最高
- preload 使用 as 屬性加載的資源將會獲得與資源 “type” 屬性所擁有的相同的優(yōu)先級。比如說,preload as="style" 將會獲得比 as=“script” 更高的優(yōu)先級。
- 不帶 as 屬性的 preload 的優(yōu)先級將會等同于異步請求。
二、preload
2-1.定義:
- <link>元素的 rel 屬性的屬性值preload能夠讓你在你的HTML頁面中<head>元素內(nèi)部書寫一些聲明式的資源獲取請求,可以指明哪些資源是在頁面加載完成后即刻需要的。
- preload 提供了一種聲明式的命令,讓瀏覽器提前加載指定資源(加載后并不執(zhí)行),需要執(zhí)行時再執(zhí)行。
2-2.好處:
- 將加載和執(zhí)行分離開,不阻塞渲染和document的onload事件。
- 提前加載指定資源,不再出現(xiàn)依賴的font字體隔了一段時間才刷出的情況。
2-3注意:
- 使用 preload 后,不管資源是否使用都將提前加載。若不確定資源是必定會加載的,則不要錯誤使用 preload,以免出現(xiàn)性能問題。
- preload 有 as 屬性,瀏覽器可以設(shè)置正確的資源加載優(yōu)先級,這種方式可以確保資源根據(jù)其重要性依次加載, 所以,preload 既不會影響重要資源的加載,又不會讓次要資源影響自身的加載;瀏覽器能根據(jù) as 的值發(fā)送適當(dāng)?shù)?Accept 頭部信息;瀏覽器通過 as 值能得知資源類型,因此當(dāng)獲取的資源相同時,瀏覽器能夠判斷前面獲取的資源是否能重用。
- 如果忽略 as 屬性,或者錯誤的 as 屬性會使 preload 等同于 XHR 請求,瀏覽器不知道加載的是什么,因此會賦予此類資源非常低的加載優(yōu)先級。
- 如果對所 preload 的資源不使用明確的 as 屬性,將會導(dǎo)致二次獲取。
- preload加載font字體資源不帶 crossorigin 也會二次獲取。
2-4.特殊用法
- preload 可以定義資源加載完畢后的回調(diào)函數(shù),如下:
<link rel="preload" rel="external nofollow" rel="external nofollow" rel="external nofollow" as="javascript" onload="preloadHandle()">
- 可以使用preload的樣式表立即生效。
<link rel="preload" href="demo.css" rel="external nofollow" onload="this.rel=stylesheet">
- 對于加載跨域的資源,必須加上 crossorigin 屬性。
<link rel="preload" as="style" crossorigin rel="external nofollow" >
- link標(biāo)簽還可以接收一個media屬性,進(jìn)行簡單的媒體查詢。
<link rel="preload" rel="external nofollow" as="image" media="(max-width: 640px)">
三、prefetch
3-1.定義:
<link>元素的 rel 屬性的屬性值prefetch能夠讓你在你的HTML頁面中<head>元素內(nèi)部書寫一些聲明式的資源獲取請求,告訴瀏覽器加載下一頁面可能會用到的資源,注意是下一頁面,而不是當(dāng)前頁面。因此該方法的加載優(yōu)先級非常低,也就是說該方式的作用是加速下一個頁面的加載速度。
3-2.實例:
<link rel="prefetch" href="./js/01.js" rel="external nofollow" > <link rel="prefetch" href="./js/02.js" rel="external nofollow" >
四、preload 和 prefetch 的區(qū)別
- preload 是告訴瀏覽器頁面必定需要的資源,瀏覽器一定會加載這些資源。
- prefetch 是告訴瀏覽器頁面可能需要的資源,瀏覽器不一定會加載這些資源。
- 在VUE SSR生成的頁面中,首頁的資源均使用preload,而路由對應(yīng)的資源,則使用prefetch。
- 對于當(dāng)前頁面很有必要的資源使用 preload,對于可能在將來的頁面中使用的資源使用 prefetch。
注意: 使用 preload 和 prefetch 的邏輯可能不是寫到一起,但一旦發(fā)生對用一資源 preload 或 prefetch 的話,會帶來雙倍的網(wǎng)絡(luò)請求。
<link rel="preload" rel="external nofollow" rel="external nofollow" rel="external nofollow" as="javascript"> <link rel="prefetch" rel="external nofollow" rel="external nofollow" rel="external nofollow" as="javascript">
以上就是preload對比prefetch的使用區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于preload對比prefetch區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue.set() this.$set()引發(fā)的視圖更新思考及注意事項
this.$set()和Vue.set()本質(zhì)方法一樣,前者可以用在methods中使用。這篇文章主要介紹了Vue.set() this.$set()引發(fā)的視圖更新思考及注意事項,需要的朋友可以參考下2018-08-08vue中router.beforeEach()的簡單用法舉例
router.beforeEach()一般用來做一些進(jìn)入頁面的限制,比如沒有登錄,就不能進(jìn)入某些頁面,只有登錄了之后才有權(quán)限查看某些頁面,下面這篇文章主要給大家介紹了關(guān)于vue中router.beforeEach()的簡單用法舉例,需要的朋友可以參考下2023-01-01vue.js添加一些觸摸事件以及安裝fastclick的實例
今天小編就為大家分享一篇vue.js添加一些觸摸事件以及安裝fastclick的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08