代码分割
对于大型web app来说,把所有的代码打包到一个文件里面显然是不高效的,如果有一些代码块只在特定情况下才需要加载的话,这样做就更不合适了。Webpack针对这个问题有一个叫做代码分割的方法,这个方法把你的代码分割成块,按需加载。
代码分割是一个可选的功能,由你来决定分割点,webpack会解决依赖、输出、运行时的问题。必须要要澄清一个误会,代码分割不自是把共用的代码提取出来打成一个包。Webpack更强大的地方是把代码分割成块之后按需加载,这样一来初始加载时间会更短,而且所有代码块都只在请求的时候下载。
确定分割点
AMD和CommomJS有不同的方法来加载代码。
CommonJS
require.ensure(dependencies,callback)
require.ensure方法可以确保在调用callback的时候能同步加载依赖,callback以require为参数。 举个例子:
require.ensure(['module-a','module-b'],function(require){
var a = require("module-a");
//...
})
注意:require.ensure只会加载模块,不会计算模块。
require(AMD)
require(dependencies,callback)
调用的时候,所有的依赖都被加载。 举个例子:
require(["module-a","module-b"],function(a,b){
//...
})
注意:AMD的require方法会加载并计算模块,从左至右计算。 callback可以省略。
代码块的内容
所有在分割点上的依赖都会变成一个新的代码块。如果你把你一个函数表达式作为分割点的回调,webpack会自动把函数里所有的依赖都加到代码块里。
代码块的优化
- 如果两个代码块包含同一个模块,它们将会合并成一个代码块。
- 如果一个模块在它的所有的父代码块都可以access,那么模块将被从移除。