内容简介:懒加载或“按需”加载是优化站点或应用程序的一个好方法。这种实践基本上涉及到在逻辑断点处拆分代码,然后在用户完成需要新代码块的操作后加载它。这会加速应用程序的初始负载,并减轻其整体重量,因为某些块甚至可能永远不会加载。懒加载并不是webpack才有的,只不过是webpack支持这种懒加载的编码方式。拿官网例子来说:增加print.js文件
懒加载或“按需”加载是优化站点或应用程序的一个好方法。这种实践基本上涉及到在逻辑断点处拆分代码,然后在用户完成需要新代码块的操作后加载它。这会加速应用程序的初始负载,并减轻其整体重量,因为某些块甚至可能永远不会加载。懒加载并不是webpack才有的,只不过是webpack支持这种懒加载的编码方式。
拿官网例子来说:
增加print.js文件
webpack-demo |- package.json |- webpack.config.js |- /dist |- /src |- index.js + |- print.js |- /node_modules 复制代码
print.js
console.log('The print.js module has loaded! See the network tab in dev tools...'); export default () => { console.log('Button Clicked: Here\'s "some text"!'); }; 复制代码
index.js
import _ from 'lodash'; function component() { const element = document.createElement('div'); const button = document.createElement('button'); const br = document.createElement('br'); button.innerHTML = 'Click me and look at the console!'; element.innerHTML = _.join(['Hello', 'webpack'], ' '); element.appendChild(br); element.appendChild(button); button.onclick = e => import(/* webpackChunkName: "print" */ './print').then(module => { const print = module.default; print(); }); return element; } document.body.appendChild(component()); 复制代码
打包结果:
Asset Size Chunks Chunk Names bundle.js 559 KiB index [emitted] index index.html 182 bytes [emitted] print.bundle.js 643 bytes print [emitted] print 复制代码
运行index.html查看Network,只加载了bundle.js文件,点击按钮时才会加载print.bundle.js文件。通过import的语法实现了懒加载。
如果print.bundle.js文件比较大,那么当我们点击按钮时,会有一定的延迟,这样虽然首屏加载时间变短了但是影响了用户体验,此时我们可以用Prefetch来解决这种问题。
Prefetch是告诉浏览器这是一个在未来可能使用到的资源。
浏览器通常会在空闲状态取得这些资源,在取得资源之后搁在HTTP缓存以便于实现将来的请求。如果有多个‘预请求提示’则会在浏览器空闲时排队执行。当浏览器离开空闲状态时正好在‘预请求’资源,那么浏览器会取消任何正在进行中的请求(同时会将部分响应数据放置在缓存中,而在Header中继续使用Content-Range字段 )并停止处理‘预请求’队列。 总之:在闲置时获取资源。
使用Prefetch很简单,仅在import时增加一条魔法注释即可:
修改index.js代码
button.onclick = e => import(/* webpackChunkName: "print", webpackPrefetch: true */ './print').then(module => { const print = module.default; print(); }); 复制代码
再次打包,打包结果不变,此时重新运行index.html查看Network,发现浏览器除了bundle.js文件外还载最后加载了print.bundle.js文件,这个文件是浏览器在空闲状态下加载的。
点击按钮,浏览器又重新加载了一次print.bundle.js,这次加载是从浏览器缓存中获取的,所以时间较短。
通过这种懒加载+Prefetch的方式就实现了页面首次加载只需要加载自己所需要的资源,其他资源在需要时再去获取的功能,优化了页面加载速度。在我们之后的编码中可以尝试使用。
Preload为当前导航过程中可能需要资源。
preload指令与prefetch有很多不同之处:
preload的块开始与父块并行加载。prefetch在父块完成加载后开始。
preload的块具有中等优先级,可以立即下载。浏览器空闲时下载prefetch块。
父块应立即请求preload的块。prefetch可以在将来的任何时候使用。
浏览器支持不同。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- SpringBoot配置加载顺序
- golang 加载ini风格配置文件
- 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置
- web.xml的加载过程配置详解
- Laravel Config—— 配置文件的加载与源码解析
- 在运行时热加载Prometheus的配置信息
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言从入门到精通
王娣//韩旭 / 清华大学 / 2010-7 / 49.80元
《C语言从入门到精通》从初学者的角度出发,以通俗易懂的语言,丰富多彩的实例,详细介绍了使用C语言进行程序开发应该掌握的各方面知识。全书共分17章,包括C语言概述,算法,数据类型,运算符与表达式,常用的数据输入、输出函数,选择结构程序设计,循环控制,数组,函数,指针,结构体和共用体,位运算,预处理,文件,存储管理,网络套接字编程和学生成绩管理系统等。所有知识都结合具体实例进行介绍,涉及的程序代码给出......一起来看看 《C语言从入门到精通》 这本书的介绍吧!