vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速

文章目录

一、vue项目打包体积大优化之productionSourceMap设置

1、productionSourceMap 的作用

productionSourceMap 在构建时生成完整的 SourceMap 文件,默认情况下开启。生产环境中启用 productionSourceMap 有助于开发者调试代码,可以在浏览器的调试工具中查看到源文件中错误的代码位置,而不是编译后的代码位置。这对于定位线上问题十分有帮助。

然而,开启 productionSourceMap 会使得构建后的代码包含源代码映射关系,导致构建后的代码文件体积增大。体积增加会影响页面加载速度,而且源代码也存在泄漏的风险,因此有些开发者会选择在生产环境中禁用 productionSourceMap。

我们在执行 npm run build 生成线上文件的时候,其实调用了 vue-cli-service build

productionSourceMap的作用在于定位问题,打包时会生成.map文件,在生产环境就可以在浏览器查看到输出的信息具体是在哪一行,但相应的包的体积也会变大,将其设置为false则不生成.map文件。

2、禁用 productionSourceMap

禁用 productionSourceMap 后,会对静态资源的定位产生影响,需要手动配置 webpack.

要想引入其它静态资源(比如图片、字体等),需要将资源放到静态资源目录(static)下,然后使用相对路径引用即可。或者使用 require 和 import 引入的静态资源,也可以通过相对路径来引入。

自己的项目在开启productionSourceMap是打包后dist目录文件大小,约为20M左右。

3、关闭 productionSourceMap
module.exports = defineConfig({
  productionSourceMap: false,
})

优化后,打包后dist目录文件大小,约为6M左右。一下子减少14MB。

4、配置 productionSourceMap

在 Vue 项目中,可以运用环境变量来控制生产环境下是否启用 productionSourceMap 属性。还是在 configureWebpack 中,可以使用 对象来获取环境变量

module.exports = defineConfig({
  productionSourceMap: process.env.VUE_APP_MODE === 'development'?true:false,
})

通过环境变量process.env来自动设置,开发环境开启,生产环境关闭。

二、vue-cli打包之性能优化-使用cdn加速

1、CDN加速是什么

CDN加速是一种网络优化技术,旨在加速网站和应用程序的内容传输和交付给用户。它通过在全球各地分布的服务器网络上存储网站、应用程序和媒体文件的副本来实现加速效果。当用户请求访问某个网站或应用程序时,CDN会根据用户的地理位置和网络条件,将内容从离用户最近的服务器上提供,从而减少了延迟和加载时间。

2、CDN加速具有以下优点:
  • 降低延迟:CDN将内容存储在全球多个位置,使用户能够从距离更近的服务器获取内容,从而降低了数据传输的延迟时间。
  • 提高性能:通过减少网络拥塞和加速内容交付,CDN可以显著提高网站和应用程序的性能,使其更快加载。
  • 负载均衡:CDN可以自动将流量分配到不同的服务器上,从而降低单个服务器的负载,确保高可用性和稳定性。
  • 减少服务器负担:由于CDN服务器负责处理大部分用户请求,源服务器的负载相对较低,可以减少源服务器的压力,提高其响应速度。
  • 提高安全性:一些CDN提供商还提供安全性功能,如DDoS攻击防护和安全证书,以增强网站和应用程序的安全性。
  • 节省带宽成本:由于CDN可以缓存和压缩内容,因此可以降低源服务器的带宽使用,从而节省带宽成本。

CDN加速在今天的互联网应用中扮演着重要的角色,特别是对于需要快速加载内容的网站、应用程序和流媒体服务来说,它可以提供更好的用户体验并帮助提高业务的性能。许多互联网公司和内容提供商都使用CDN来优化其在线服务。

3、vue.config.js配置
const { defineConfig } = require('@vue/cli-service')
let externals = {}
let cdn = {
  css: [],
  js: []
}
const isProduction = process.env.NODE_ENV === 'production' // 判断是否是生产环境
if (isProduction) {
  externals = {
      'vue': 'Vue',
      'element-ui': 'ELEMENT',
      'vuex': 'Vuex',
      'axios': 'axios',
    },
    cdn = {
      css: ['https://unpkg.com/element-ui/lib/theme-chalk/index.css'],
      js: ['https://unpkg.com/vue@2.6.12/dist/vue.js',
        'https://unpkg.com/element-ui/lib/index.js',
        'https://cdn.bootcdn.net/ajax/libs/vuex/4.0.2/vuex.cjs.min.js',
        'https://cdn.bootcdn.net/ajax/libs/axios/0.26.1/axios.js'
      ],
    }
}
module.exports = defineConfig({
  transpileDependencies: true,
  configureWebpack: {
    externals, // 采用cdn的方式,所以将以下这些文件配置不打包
  },
  chainWebpack(config) {
    // 注入cdn
    config.plugin("html").tap(args => {
      args[0].cdn = cdn
      return args
    })
  }
})
4、index.html配置
<head>
<!-- 使用CDN的CSS文件 -->
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
  <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %> " rel="stylesheet">
<% } %>
</head>

<body>
<!-- 使用CDN的JS文件 -->
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
<script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>" defer></script>
<% } %>
</body>
相关推荐
Ogcloud天耘科技17 天前
CDN加速是什么?CDN加速的原理是什么?
cdn·cdn加速·企业组网·组网·网络加速·cdn网络加速
Vgbire1 个月前
我把前端部署用户提醒做成了一个npm包
前端·webpack·性能优化·npm·vite·打包优化·webpack优化
TIANGEKUAJING4 个月前
如何通过 CDN 优化网站加载速度
网络·cdn·cdn加速·企业组网
范特西是只猫4 个月前
解决vite打包只生成了一个css和js文件问题
前端·vite·打包优化·路由懒加载
Amd7945 个月前
Django 静态文件管理与部署指南
webpack·cdn加速·secstatic·cicd-tools·staticdeploy·djangocompress·webopt
火伞云1 年前
流媒体内容分发终极解决方案:当融合CDN与P2P视频交付结合
服务器·p2p·cdn·cdn加速