美文网首页
[webpack 学习系列] lazy loading 懒加载

[webpack 学习系列] lazy loading 懒加载

作者: 小黄人get徐先生 | 来源:发表于2019-12-31 11:41 被阅读0次

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

好的例子:文章的 Code splitting 部分有两个关于懒加载的例子可以学习学习


例子:
src/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());

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"!');
};

webpack.config.js

const path =  require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
    mode: 'development',
    entry: {
        app: './src/index.js'
    },
    devtool: "source-map",
    devServer: {
        contentBase: './dist',
        open: true,
        hot: true,
        hotOnly: true
    },
    output: {
        filename: '[name].bundle.js',
        chunkFilename: "[name].js",
        path: path.resolve(__dirname, 'dist')
    },
    plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ],
    resolve: {
        extensions: ['.js']
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            }
        ]
    },
    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    }
};

执行 yarn build (即 webpack)打包后的结果如下图:


打包后生成了三个 chunk:
  1. app.bundle.js 下主要包含了 src/index.js 的逻辑;
  2. vendors~app.js 下主要包含了从 node_modules 下引入的模块,这里主要是 loadsh
  3. 因为 print.js 是通过 import语法导入的,所以这里默认生成了 print.js chunk。

加下来我们打开网页后查看 network 如图显示:

初始化页面后加载了 vendors~app.js 和 app.bundle.js
当我们点击 button 按钮后,页面请求加载了 print.js

通过这里例子我们发现,print.js 文件初始化的时候并不会加载,只有在用户点击按钮后才会加载,这样的实现便是懒加载。

相关文章

网友评论

      本文标题:[webpack 学习系列] lazy loading 懒加载

      本文链接:https://www.haomeiwen.com/subject/epdboctx.html