美文网首页
用webpack实现模块懒加载、预取/预加载

用webpack实现模块懒加载、预取/预加载

作者: 指尖跳动 | 来源:发表于2020-01-29 20:06 被阅读0次

模块懒加载本身与webpack没有关系,webpack可以让懒加载的模块代码打包到单独的文件中,实现真正的按需加载。webpack会自动对异步代码进行分割。

示例代码如下:

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

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

需要配置@babel/preset-env"useBuiltIns": "usage"

{
   "presets": [
     ["@babel/preset-env",{
       "targets": {
          "chrome": "67"
        },
        "useBuiltIns": "usage",
        "corejs": "3"
     }
     ],
     "@babel/preset-react"
   ],
    "plugins": [
      "@babel/plugin-syntax-dynamic-import"
    ]
}

执行打包指令,打包后的文件如下:



生成了vendors~lodash.js文件。
浏览器打开打包后的html文件,查看Network如下:


点击后才会加载vendors~lodash.js

实现了模块按需加载。

异步函数的方式:

async function getComponent(){
    const { default: _} = await import(/* webpackChunkName: "lodash" */ 'lodash')
    const element = document.createElement('div')
    element.innerHTML = _.join(['a','b'],'-')
    return element
}


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

webpackPrefetch 、webpackPreload

与 prefetch 指令相比,preload 指令有许多不同之处:

  • preload chunk 会在父 chunk 加载时,以并行方式开始加载。prefetch chunk 会在父 chunk 加载结束后开始加载。
  • preload chunk 具有中等优先级,并立即下载。prefetch chunk 在浏览器闲置时下载。
  • preload chunk 会在父 chunk 中立即请求,用于当下时刻。prefetch chunk 会用于未来的某个时刻。
  • 浏览器支持程度不同。
async function getComponent(){
    const { default: _} = await import(/* webpackChunkName: "lodash", webpackPrefetch: true */ 'lodash')
    const element = document.createElement('div')
    element.innerHTML = _.join(['a','b'],'-')
    return element
}

相关文章

  • 用webpack实现模块懒加载、预取/预加载

    模块懒加载本身与webpack没有关系,webpack可以让懒加载的模块代码打包到单独的文件中,实现真正的按需加载...

  • webpack打包代码实现

    webpack模块加载 异步模块加载 通过 import()实现指定模块的懒加载操作 懒加载的核心原理就是创建js...

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

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

  • JS

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

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • ViewPager+Fragment预加载和懒加载分析

    1 什么是fragment的预加载和懒加载? 预加载:viewpager显示当前fragment的时候,viewp...

  • 4-8 打包分析

    1. 简介 上一节4-3~8 code-splitting,懒加载,预拉取,预加载讲到如何对代码进行 code s...

  • vue中图片预加载&懒加载

    简单解释 懒加载顾名思义,很懒,所以用到时才开始加载,不用不加载。 预加载,预,提前的意思。没用到时...

  • 懒加载、预加载、

    懒加载是什么: 能防止页面一次性向服务器响应大量请求导致服务器响应慢,页面卡顿或崩溃等问题是提到前端性能优化中图片...

  • 预加载 + 懒加载

    http://web.jobbole.com/85294/

网友评论

      本文标题:用webpack实现模块懒加载、预取/预加载

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