webpack学习第十三步——懒加载和预请求

2020-02-14  本文已影响0人  Love小六六

同步引入

import _ from 'lodash'

document.addEventListener('click',() => {
    var element = document.createElement('div')
    element.innerHTML =_.join(['a','b','c'],'***')
    document.body.appendChild(element)
})

异步引入可以懒加载

function getComponent() {
    return import(/* webpackChunkName:'lodash' */'lodash').then(({default: _}) => {
        var element = document.createElement('div')
        element.innerHTML =_.join(['a','b','c'],'***')
        return element
    })
}

document.addEventListener('click',() => {
    getComponent().then(element => document.body.appendChild(element))
})
async function getComponent() {
    const {default: _} = await import(/* webpackChunkName:'lodash' */'lodash')
    var element = document.createElement('div')
    element.innerHTML =_.join(['a','b','c'],'***')
    return element
}

document.addEventListener('click',() => {
    getComponent().then(element => document.body.appendChild(element))
})

所以webpack的splitChunks默认对异步import进行代码分割,是因为它默认异步引入使用懒加载,性能会优化

打包分析

"scripts": {
// 打包的profile生成一个state.json文件
    "dev": "webpack --profile --json>states.json --config ./config/webpack.dev.js",
     ...
  }

文件拆分优化代码

document.addEventListener('click',() =>{
    var element = document.createElement('div')
    element.innerHTML ='dingding'
    document.body.appendChild(element)
})

Prefetch 预请求

import _ from 'lodash'
// 引入lodash并将splitChunks改为async。这样main.js会更大,效果更明显
document.addEventListener('click',() => {
// 加上webpack预请求注解
    import(/* webpackPrefetch: true */'./handleClick.js').then(({default: func}) => {
        func()
    })
})
上一篇下一篇

猜你喜欢

热点阅读