webpack的懶加載和預(yù)加載詳解
正常加載
為了看的方便,index.js中的代碼非常簡(jiǎn)單
console.log('index.js執(zhí)行了')
import { test } from './test.js'
document.getElementById('btn-wrap').onclick = function () {
test()
}
test.js
console.log('test.js執(zhí)行了')
export function test() {
const value = 'hello world'
console.log('test value: ', value)
}
在index.html中添加按鈕
<button id='btn-wrap'>點(diǎn)擊</button>
執(zhí)行webpack命令:

可以看到?jīng)]有點(diǎn)擊按鈕時(shí),test.js就已經(jīng)加載了 。如果test.js比較大,加載比較耗性能。我們就希望能在需要使用的時(shí)候在加載
懶加載
修改index.js中的代碼
console.log('index.js執(zhí)行了')
// import { test } from './test.js'
// document.getElementById('btn-wrap').onclick = function () {
// test()
// }
document.getElementById('btn-wrap').onclick = function () {
console.log('==== 點(diǎn)擊按鈕')
import(/*webpackChunkName:'test' */"./test")
.then(({test}) => {
console.log('test加載成功')
test()
})
.catch(error => {
console.log('test加載失敗 error:', error)
})
}
再次執(zhí)行webpack命令,在瀏覽器中查看日志
點(diǎn)擊按鈕之前只加載了index.js

點(diǎn)擊按鈕:

可以看到點(diǎn)擊按鈕之后test.js才執(zhí)行。
預(yù)加載
懶加載實(shí)現(xiàn)了js文件按需加載,在需要使用時(shí)才進(jìn)行加載,但是如果js文件非常大加載速度比較慢,在使用時(shí)再加載就會(huì)使頁面出現(xiàn)卡頓。為了優(yōu)化這個(gè)問題,可以使用Prefetch先預(yù)加載。
沒有使用預(yù)加載
點(diǎn)擊按鈕之前不會(huì)加載test.js文件

點(diǎn)擊按鈕之后才會(huì)去加載test.js文件

使用預(yù)加載
設(shè)置webpackPrefetch:true使用預(yù)加載
document.getElementById('btn-wrap').onclick = function () {
console.log('==== 點(diǎn)擊按鈕')
import(/*webpackChunkName:'test' ,webpackPrefetch:true*/"./test")
.then(({test}) => {
console.log('test加載成功')
test()
})
.catch(error => {
console.log('test加載失敗 error:', error)
})
}
點(diǎn)擊按鈕之前就預(yù)加載了test.js文件:

點(diǎn)擊按鈕:

總結(jié)
正常加載:很多資源并行加載,同一時(shí)間加載多個(gè)文件
懶加載:需要時(shí)才加載
預(yù)加載:等其他資源加載完畢,瀏覽器空閑了,再偷偷加載被設(shè)置為預(yù)加載的資源
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JS關(guān)閉窗口與JS關(guān)閉頁面的幾種方法小結(jié)
本篇文章要是對(duì)JS關(guān)閉窗口與JS關(guān)閉頁面的幾種方法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
封裝了一個(gè)支持匿名函數(shù)的Javascript事件監(jiān)聽器
這篇文章主要介紹了支持匿名函數(shù)的Javascript事件監(jiān)聽封裝,需要的朋友可以參考下2014-06-06
JavaScript刪除數(shù)組中指定元素5種方法例子
這篇文章主要給大家介紹了關(guān)于JavaScript刪除數(shù)組中指定元素5種方法,在最近的項(xiàng)目中,有用到j(luò)s對(duì)數(shù)組的操作,所以這里總結(jié)一下,需要的朋友可以參考下2023-07-07
document.documentElement和document.body區(qū)別介紹
body是DOM對(duì)象里的body子節(jié)點(diǎn),即body標(biāo)簽,documentElement 是整個(gè)節(jié)點(diǎn)樹的根節(jié)點(diǎn)root,詳細(xì)介紹請(qǐng)看本文,感興趣的朋友可以參考下2013-09-09
JavaScript forEach()遍歷函數(shù)使用及介紹
這篇文章主要介紹了JavaScript forEach()遍歷函數(shù)使用及介紹,本文講解了使用forEach遍歷數(shù)組的用法以及提前終止循環(huán)的一個(gè)方法技巧,需要的朋友可以參考下2015-07-07
js添加千分位的實(shí)現(xiàn)代碼(超簡(jiǎn)單)
下面小編就為大家?guī)硪黄猨s添加千分位的實(shí)現(xiàn)代碼(超簡(jiǎn)單)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
限時(shí)搶購-倒計(jì)時(shí)的完整實(shí)例(分享)
下面小編就為大家?guī)硪黄迺r(shí)搶購-倒計(jì)時(shí)的完整實(shí)例(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
echarts如何實(shí)現(xiàn)動(dòng)態(tài)曲線圖(多條曲線)
這篇文章主要介紹了echarts如何實(shí)現(xiàn)動(dòng)態(tài)曲線圖(多條曲線),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
一個(gè)JS函數(shù)搞定網(wǎng)頁標(biāo)題(title)閃動(dòng)效果
這篇文章主要介紹了使用JS函數(shù)實(shí)現(xiàn)網(wǎng)頁標(biāo)題(title)閃動(dòng)效果的代碼,需要的朋友可以參考下2014-05-05

