本文旨在用一个简单的实例来讲明代码分割和懒加载。javascript
webpack提供了代码分割和懒加载功能,关于这项功能,鄙人认为代码分割是前提,懒加载是结果,只有实现了代码分割,才能懒加载。html
那么如何才能实现代码分割呢?须要在必定程度上按照懒加载的需求对原来的代码进行修改。如何修改你须要知道下面的东东。java
代码分割能够采用webpack
webpack methods
: require.ensure || require.include
ES2015 loader
: System.import
基本废弃变为import || 动态import
require.ensure
官网中所require.ensure()
已经被import( )
所取代
这个方法接受四个参数git
var a = require('normal-dep'); if ( module.hot ) { require.ensure(['b'], function(require) { var c = require('c'); // Do something special... }); }
dependencies
: An array of strings declaring all modules required for callback
: A function that webpack will execute once the dependencies errorCallback
: A function that is executed when webpack fails to load chunkName
: A name given to the chunk created by this particular 看完了概念,下面让咱们结合就具体的例子来看看代码分割和懒加载。github
简要说明:index.html只有一个button按钮,点击会发送ajax请求,请求qq音乐网站热门搜索词条。jsonp.js对第三方库jsonp进行封装,用jsonp是为了实现跨域。点击页面button按钮会发送ajax请求,并将请求到的数据处理后在控制台打印。web
//webpack.config.js
var path = require('path')
module.exports = {
entry: {
app: './app.js'
}
output: {
path: path.resovle('__dirname', './dist')
publicPath: './dist/', //这一步不可少,不然代码分割懒加载找不到相应文件
filename: '[name].bundle.js'
}
}
代码不分割,打包后会生成app.bundle.js
,html中引入该文件。在浏览器中打开会能够看到加载了app.bundle.js,
点击button会发送ajax请求,在控制台能够看到信的网络请求和须要打印的信息
console.log
的信息
上面这个例子是没有进行代码分割和懒加载的。ajax
代码分割npm
代码改写分割后,能够看到打包后生成app.bundle.js, dom.js
。json
能够看到初始页面上加载的app.bundle.js由24.7kb变为6kb,加载时间由8ms变为7ms,复杂的项目中更能体现代码分割和懒加载的优点。
点击页面button按钮,在控制台的network中能够看到先请求dom.bundle.js,而后发送ajax请求。
。
本文用一个简单的实例介绍了代码分割和懒加载,import使用和require.ensure大同小异。咱们应该知道的是为何须要代码分割和懒加载,以及如何实现代码分割和懒加载。