使用 CDN 资源

当你的网站部署在宽带较小的服务器时,资源的加载会明显增加首页白屏的时间,即网页在首次下载资源完毕前未渲染任何内容,处于假死状态。这种情况下,你应该考虑使用 CDN 来加快资源的下载速度。

在不使用 CDN 资源情况下,我们引入的第三方依赖都会经过 webpack 处理,这样会增加应用的构建速度。

# 选择合适的 CDN

我们选择免费的 CDN,比如:jsDelivr (opens new window)unpkg (opens new window)。当然,你也可以搭建自己的 CDN。

# 配置 CDN 外链

将以下代码添加进 vue.config.js

const IS_PROD = process.env.NODE_ENV === 'production'

const assetsCDN = {
  externals: {
    vue: 'Vue',
    'vue-router': 'VueRouter',
    vuex: 'Vuex',
    axios: 'axios',
  },
  css: [],
  js: [
    // 请注意顺序,vue.js 应该位列在首位,以便首先加载 vue
    '//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js',
    '//cdn.jsdelivr.net/npm/vue-router@3.1.6/dist/vue-router.min.js',
    '//cdn.jsdelivr.net/npm/vuex@3.1.3/dist/vuex.min.js',
    '//cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js',
  ],
}

module.exports = {
  chainWebpack: (config) => {
    config
      .plugin('html')
      .tap((args) => {
        if (IS_PROD) {
          // 传递给 index.html 模板
          args[0].cdn = assetsCDN
        }
        return args
      })
  },

  configureWebpack: (config) => {
    if (IS_PROD) {
      config.externals = {
        ...config.externals,
        ...assetsCDN.externals,
      }
    }
  },
}

之后在 public/index.html 注入外链。

<head>
  <!-- 引入样式 -->
  <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
    <link rel="stylesheet" href="<%=css%>">
  <% } %>
</head>

<body>
  <!-- 引入 JS -->
  <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
    <script src="<%=js%>"></script>
  <% } %>
</body>
最近更新: 4/3/2021, 9:45:39 AM