Webpack 懒加载

懒加载

懒加载,也称作按需加载,是一种很好的优化网页或应用的方式。这种方式实际上是先把你的代码在一些逻辑断点处拆分,然后在一些代码块中完成某些操作后,立即引用或即将引用另外一些新的代码块。这样加快了应用的初始加载速度,减轻了它的总体体积,因为某些代码块可能永远不会被加载。

示例

在代码分离中的例子基础上,进一步做些调整来说明这个概念。那里的代码确实会在脚本运行的时候产生一个分离的代码块 lodash.bundle.js。

问题是加载这个包并不需要用户的交互,每次加载页面的时候都会请求它。这样做并没有多大好处,还会对性能产生负面影响。

试试不同的做法。我们增加一个交互,当用户点击按钮的时候用 console 打印一些文字。但是会等到第一次交互的时候再加载那个代码块(print.js)。为此,我们返回到代码分离的例子中,把 lodash 放到主代码块中,重新运行代码分离中的代码。

新增 src/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"!');
}

修改 src/index.js 文件:

import _ from 'lodash';
function component() {
    var element = document.createElement('div');
    var button = document.createElement('button');
    var br = document.createElement('br');
    button.innerHTML = 'Click me and look at the console!';
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');
    element.appendChild(br);
    element.appendChild(button);
    // Note that because a network request is involved, some indication
    // of loading would need to be shown in a production-level site/app.
    button.onclick = e => import(/* webpackChunkName: "print" */ './print').then(module => {
        var print = module.default;
        print();
});
    return element;
}
document.body.appendChild(component());

现在运行 webpack 来验证一下我们的懒加载功能:

npm run dev

执行结果如下:

Hash: 22f761e87c26add44e84
Version: webpack 4.0.0
Time: 596ms
Built at: 2018-3-3 20:47:39
          Asset       Size  Chunks                    Chunk Names
index.bundle.js    555 KiB   index  [emitted]  [big]  index
print.bundle.js  645 bytes   print  [emitted]         print
     index.html  205 bytes          [emitted]
Entrypoint index [big] = index.bundle.js
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 509 bytes {index} [built]
[./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 519 bytes {index} [built]
[./src/index.js] 744 bytes {index} [built]
[./src/print.js] 170 bytes {print} [built]

在这个例子中,只有当我们点击页面的按钮时,才会加载 print.bundle.js,这样就实现了懒加载或者说按需加载。

框架

许多框架和类库对于如何用它们自己的方式来实现(懒加载)有自己的建议。这里有一些例子:

发布了378 篇原创文章 · 获赞 589 · 访问量 108万+

猜你喜欢

转载自blog.csdn.net/lamp_yang_3533/article/details/100428598
今日推荐