一文大白话讲清楚webpack基本使用——9——预加载之prefetch和preload以及webpackChunkName的使用

文章目录

一文大白话讲清楚webpack基本使用------9------预加载之prefetch和preload

1. 建议按文章顺序从头看,一看到底,豁然开朗

2. preload和prefetch的区别

  • 通过翻译,prefetch是欲拉取;preload也是预加载,说白了都是预加载,那有什么区别呢
  • 区别就是相对于谁去预加载,也正因为有相对于谁,所以有有一个优先级的问题
  • 相对于谁呢,相对于他们所在的父chunk,
  • preload在父chunk加载时,并行开始加载;而prefetch是在父chunk加载完成后,在浏览器空闲时才加载
  • preload chunk会在父chunk中立即请求,立刻作用;而prefetch会在未来某个时刻作用
  • 所以,preload的优先级要比prefetch高。

2. prefetch的使用

  • prefetch怎么用呢,通过动态加载时进行魔法注释
  • 我们第八篇文章讲懒加载的时候,
  • 一文大白话讲清楚webpack基本使用------7------代码分离和懒加载
  • 在main.js里面通过 import('./modulejs/dynamic.js').then()动态加载dynamic.js,构建后,浏览器先不加载chunkJS,只有点击了btn之后才加载chunkJS
  • 现在我们让dynamic变成prefetch加载,就是在浏览器空闲的时候去加载他。实现的方式是在import时使用魔法注释
js 复制代码
import(
    /* webpackPrefetch:true */  //这里通过魔法注释,标明为prefetch
    './modulejs/dynamic.js'
    ).then(res=>{//通过import动态引入返回的是一个promise对象,then方法里面的res就是我们dynamic.js 里面export出来的对象
    res.addOnePToBody()
})
  • 然后我们重新构建
js 复制代码
npm run build
  • 我们运行index.html,打开调试器Elements,发现里面多了一个<link rel="prefetch" as="script" href='xxx.js">

  • 说明prefetch方式会议link的方式将js挂载到页面,然后在浏览器空闲的时候进行下载

3. preload的使用

  • preload的使用方式跟prefetch是一样的,通过魔法注释
  • 我们直接上代码
js 复制代码
import(
        /* webpackPreload:true */  //这里通过魔法注释,标明为preload
        './modulejs/dynamic.js'
        ).then(res=>{//通过import动态引入返回的是一个promise对象,then方法里面的res就是我们dynamic.js 里面export出来的对象
        res.addOnePToBody()
    })
  • 更好的验证效果,我们dynamic.js里面新加一个函数
js 复制代码
function sayHello(){
    console.log('I`m sayHello from dynamic.js loade by preloade')
}
  • 然后再main.js里面动态引用引用
js 复制代码
import(
   
    './modulejs/dynamic.js'
    ).then(res=>{//通过import动态引入返回的是一个promise对象,then方法里面的res就是我们dynamic.js 里面export出来的对象
    res.sayHello()
})
  • 然后我们重新构建
js 复制代码
npm run build
  • 在浏览器里面运行index.html,发现dynamic.js的chunkJS直接被加载了

** 在实际开发中,我们优先使用prefetch,等待浏览器空闲时再预加载**

4. webpackChunkName

  • 这个就是给动态导入的chunk取一个别名

  • 如果我们output配置filename中包含name,那么我们就可以通过异步导入的时候制定别名

  • 同样使用魔法注释来实现

  • 我们现在修改output的filename,加入name

  • 然后动态导入dynamic.js的chunkJS时去个别名,叫rename-dynamic

js 复制代码
import(
    /* webpackChunkName:"rename-dynamic" */
    './modulejs/dynamic.js'
    ).then(res=>{//通过import动态引入返回的是一个promise对象,then方法里面的res就是我们dynamic.js 里面export出来的对象
    res.sayHello()
})
  • 然后我们重新构建
js 复制代码
npm run build
  • 发现构建的chunkJS已经加上了rename-dynamic前缀

  • 就是这个道理,在prefetch和preload里面将这个webpackChunkName,是因为都是因为使用魔法注释

相关推荐
福兮说2 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
程序员老赵3 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
Swot4 小时前
Asciidoctor 公式数字下标错位问题:原因分析与解决方案
前端
Swot4 小时前
leo-editor 中将 Markdown 内容转成 asciidoc 格式
前端
狒狒AI4 小时前
Remotion / GSAP+Three / HyperFrames / Skia 四栈实测:代码渲染知识视频的选栈方法(附开源技能)
前端·人工智能·aigc
修炼的dance4 小时前
浏览器里导出H.265,8.5秒和55.5秒差在硬件
前端
补码缩写4 小时前
WebCodecs选编码器,探测之后还要验解码和播放
前端
大文说跨境4 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
hunter_0764 小时前
iOS 首页复杂嵌套滚动技术方案:头部固定 + 网格滚动 + Tab 吸顶 + 每 Tab 独立下拉刷新
前端
CoderYanger4 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc