美文网首页
webpack学习第十三步——懒加载和预请求

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

作者: Love小六六 | 来源:发表于2020-02-14 20:09 被阅读0次

同步引入

  • index.js
import _ from 'lodash'

document.addEventListener('click',() => {
    var element = document.createElement('div')
    element.innerHTML =_.join(['a','b','c'],'***')
    document.body.appendChild(element)
})
  • 打开页面时就会引入lodash


异步引入可以懒加载

  • index.js
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))
})
  • 点击时才去请求异步引入的lodash,这就是懒加载
  • 优化语法,使用异步函数
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",
     ...
  }
  • 生成的state.json文件

文件拆分优化代码

  • 普通写法
document.addEventListener('click',() =>{
    var element = document.createElement('div')
    element.innerHTML ='dingding'
    document.body.appendChild(element)
})
  • 将异步操作拆分

    • 新建handleClick.js文件
    function handleClick() {
        var element = document.createElement('div')
        element.innerHTML ='dingding'
        document.body.appendChild(element)
    }
    
    export default handleClick
    
    • 修改index.js
    document.addEventListener('click',() => {
        import('./handleClick.js').then(({default: func}) => {
            func()
        })
    })
    
    • 点击时请求handleClick的内容

Prefetch 预请求

  • 核心代码加载完成后去加载
  • 修改index.js
import _ from 'lodash'
// 引入lodash并将splitChunks改为async。这样main.js会更大,效果更明显
document.addEventListener('click',() => {
// 加上webpack预请求注解
    import(/* webpackPrefetch: true */'./handleClick.js').then(({default: func}) => {
        func()
    })
})
  • 加载完main.js不需要点击,会自动加载handleClick

相关文章

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

    同步引入 index.js 打开页面时就会引入lodash 异步引入可以懒加载 index.js 点击时才去请求异...

  • Web前端性能优化(二)

    1. 懒加载和预加载 懒加载 即延迟加载,在电商或是页面很长的业务场景中,我们通常会使用懒加载的方式对图片进行请求...

  • web优化之懒加载和预加载

    懒加载和预加载是常用的web优化的手段。所以我们首先应该明白什么是懒加载和预加载。懒加载:懒加载也加延迟加载,延迟...

  • 前端性能优化

    (1)懒加载与预加载 懒加载的场景 图片进入可视区域之后进行资源请求 减少无效资源的加载 并发加载的资源过多会阻塞...

  • 懒加载和预加载

    一、懒加载 1.什么是懒加载 懒加载也叫延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式。用户...

  • 懒加载和预加载

    1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加载:提前加载图片...

  • 懒加载和预加载

    懒加载就是在资源进入可视区域之后再加载 页面可视区高度: clientHeight = window.innerH...

  • 懒加载和预加载

    1、懒加载 1.什么是懒加载? 懒加载也就是延迟加载。 当访问一个页面的时候,先把img元素或是其他元素的背景图片...

  • 懒加载和预加载

    懒加载和预加载 1. 懒加载 1. 什么是懒加载? 懒加载也就是延迟加载 当访问一个页面的时候,先把img元素或是...

  • 懒加载和预加载

    待编辑中。。。

网友评论

      本文标题:webpack学习第十三步——懒加载和预请求

      本文链接:https://www.haomeiwen.com/subject/eehhvqtx.html