webpack html加载完毕,webpack中实现按需加载

本文详细介绍了如何使用webpack的require.ensure和import()方法实现按需加载,以减小页面响应时间并提升访问速度。通过实例展示了这两种方法在实际操作中的区别和效果,包括资源请求和输出情况,强调了它们在动态加载模块中的应用。
摘要由CSDN通过智能技术生成

当页面中一个文件过大并且还不一定用到的时候,我们希望在使用到的时候才开始加载这个文件俗称按需加载。这样可以减少页面的响应时间,提高访问速度。

使用webpack打包的出来的文件要实现以上的要求有两种方式,一个是webpack特有的require.ensure方法,还有一个是import方法。

require.ensure(dep: array, cb: function, name?: string)

第一个参数是该模块的依赖,第二个参数是模块加载完成后执行的回调,第三个参数是对应webpack.config.js中output.chunkFilename: ‘[name].js’ 中的name。

index.html文件

点击我

button>

index.js文件

document.querySelector('#btn').onclick = function () {

require.ensure([], function () {

let a = require('./asynca.js')

console.log('asynca模块加载完毕:'a)

}, 'asynca')

}

asynca.js文件

console.log('我是async模块')

export const a = '模块async'

webpack.config.js文件

let path = require('path')

let HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {

entry: './src/index.js',

output: {

path: path.resolve('./dist'),

filename: '[name].[chunkHash].js',

chunkFilename: '[name].[chunkHash].js'

},

plugins: [

new HtmlWebpackPlugin({

template: './src/index.html',

filename: 'index.html'

})

]

}

打包结果如下:

16d1293a431843104eb104b38f0aa679.png

预览index.html,查看资源请求和输出情况:

打开dist中打包后的文件发现,只有一个index.html文件和man…js文件被加载了,并且require.ensure的回调并没有被执行过的迹象:

b23cddf6634f7dfd38803d5208927e95.png

点击按钮后资源请求和输出情况:

bd2485c082f2d79a68e5973636775243.png

asynca文件被动态加载进来,并且require.ensure的回调函数被执行了。

小结

通过以上的观察我们通过require.ensure实现了我们动态加载模块的目的。

import()

该方法返回一个promise,文件加载完成之后会将模块导出给promise的回调。

index.import.js

document.querySelector('#btn').onclick = function () {

console.log('我是通过import来实现按需加载的')

let a = import('./asynca.js')

a.then(function (res) {

console.log('加载完成的async模块', res)

})

}

注:其他文件和ensure方法的一致。

打包结果如下:

ba63519cceac7f97befb4ce52ede66c6.png

预览index.html,查看资源请求和输出情况:

0aee080ef8e739bd169d0179f527310a.png

点击按钮后资源请求和输出情况:

e6d80389e5624ff82870043347649a12.png

小结

观察发现import方法同样可以实现按需加载的需求,但是生成的文件名是按数字来命名的,并不能像ensure的第三个参数来指定,我想应该是有方法实现的。

参考

https://segmentfault.com/q/1010000014699780/a-1020000015102124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值