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

简介: 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>

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
2月前
|
缓存 监控 安全
阿里云CDN设置阀值的指南
阿里云CDN设置阀值的指南
|
3月前
|
JavaScript 前端开发 Java
vue-day01 使用cdn引入使用
文章介绍了Vue.js的基础用法,包括数据绑定、条件渲染、列表渲染、事件处理等。通过示例代码展示了如何使用Mustache语法、v-once指令、v-html指令、v-bind和v-on指令,以及动态参数、修饰符和指令缩写。这些基础知识为初学者提供了Vue.js的使用入门。
vue-day01 使用cdn引入使用
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
3月前
|
JSON JavaScript 数据格式
vue写入json数据到文本中+vue引入cdn的用法
vue写入json数据到文本中+vue引入cdn的用法
56 10
|
3月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
6月前
|
JavaScript 开发工具 git
大事件项目64----打包发布_cdn地址引入,免费cdn的网站
大事件项目64----打包发布_cdn地址引入,免费cdn的网站
|
6月前
|
前端开发 JavaScript CDN
大事件项目63----cdn介绍
大事件项目63----cdn介绍
|
6月前
|
JavaScript CDN
大事件项目61------打包发布_dist瘦身的分析_把第三方包排除掉换成cdn链接
大事件项目61------打包发布_dist瘦身的分析_把第三方包排除掉换成cdn链接
|
2月前
|
云安全 网络安全 CDN
阿里云CDN遇到攻击?别慌,教你如何应对!
阿里云CDN遇到攻击?别慌,教你如何应对!
|
2月前
|
缓存 前端开发 JavaScript
阿里云CDN:怎么让网站变快
阿里云CDN:怎么让网站变快