单页应用——懒加载

什么是懒加载

懒加载也叫作惰性加载,其本质就是在页面加载的时候,处于懒加载的 js 不会被请求,当触发某个操作的时候,懒加载的 js 才会被加载。目的就是在页面加载的时候,尽量加载当前页面用到的信息。

准备工作

为了保证代码的统一,首先把安装的依赖贴出来:

{
  "devDependencies": {
    "webpack": "^4.17.1",
    "webpack-cli": "^3.1.0"
  },
  "scripts": {
    "webpack": "webpack"
  }
}

Webpack 的配置 webpack.config.js 如下:

const { join } = require('path');

module.exports = {
  mode: 'production',
  entry: {
    index: join(__dirname, './src/index.js')
  },
  output: {
    path: join(__dirname, './dist'),
    filename: '[name].bundle.js',
    chunkFilename: '[name].chunk.js',           // 根据 chunk name 生成对应的文件
    publicPath: join(__dirname, './dist/')      // 入口 bundle 查找其他 chunk 依赖的路径
  }
};

在入口文件 index.js 中创建了一个 Button,当点击这个 Button 的时候加载 print.js,这个时候 print.js 就是一个惰性加载的 js。

function component() {
  var element = document.createElement('div');
  var button = document.createElement('button');
  button.innerHTML = '点击查看懒加载';
  element.appendChild(button);

  button.onclick = e => import ( /* webpackChunkName: "print" */ './print').then(module => {
    var print = module.default;
    print();
  });

  return element;
}

document.body.appendChild(component());

惰性加载的 print.js 中的内容如下:

export default () => {
  console.log('Button Clicked: Here\'s "some text"!');
};

index.html 的代码如下:

<body>
  <script src="./dist/index.bundle.js"></script>
</body>

查看效果

执行命令 yarn webpack,会看到如下的打包信息:

          Asset       Size  Chunks             Chunk Names
index.bundle.js   2.26 KiB       0  [emitted]  index
 print.chunk.js  251 bytes       1  [emitted]  print
Entrypoint index = index.bundle.js

这不是重点,重点是在浏览器中打开 index.html,这个时候会在浏览器中看到一个按钮,先不要急着点击。

打开开发者工具,点击 Network,刷新页面,会发现,加载的文件只有两个:

index.html
index.bundle.js

此时点击按钮,会发现,多加载了一个 print.chunk.js,这个就是惰性加载(点击了按钮之后才会加载的内容)。

posted @ 2018-08-28 17:23  沫俱宏  阅读(539)  评论(0编辑  收藏  举报