vue 性能优化方案

这篇具有很好参考价值的文章主要介绍了vue 性能优化方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        首先说明一下,我优化的项目是基于vue3 + ts的一个项目,使用的是webpack5的版本,不一定非要是webpack5经测试4也可以正常使用

        若想查看自己当前项目的webpack版本,可以找node_modules目录下面的webpack/package.json文件,查看文件中的version,如下图

productionsourcemap,vue.js,性能优化,前端

下面开始进入正题

一、关闭productionSourceMap

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

module.exports = defineConfig({
  productionSourceMap: false,
})

二、开启gzip

        gzip并不能很好的减小dist包的体积,个人觉的主要作用是在你build后,会生成两份代码,一份压缩的,一份未压缩的,在请求时服务器会优先选择压缩的版本进行返回

// 判断是否是生产环境
const isProduction = process.env.NODE_ENV !== "development";
module.exports = {
  configureWebpack: config => {
    // 若是生产环境,则执行以下代码
    if (isProduction) {
      //gzip压缩
      const productionGzipExtensions = ["html", "js", "css"];
      config.plugins.push(
        new CompressionWebpackPlugin({
          filename: "[path][base].gz", // 有的版本是[path].gz[query] 根据情况而定
          algorithm: "gzip",
          test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
          threshold: 10240, // 只有大小大于该值的资源会被处理 10240
          minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
          deleteOriginalAssets: false, // 删除原文件
        })
      );
    }
  }
}

上面配置完后,还需配置下nginx

        在ngxin.conf文件,在http模块填入以下内容

 # 开启gzip
    gzip on;

    # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
    gzip_min_length 1k;

    # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
    gzip_comp_level 2;

    # 进行压缩的文件类型。javascript有多种形式,后面的图片压缩不需要的可以自行删除
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;

    # 设置压缩所需要的缓冲区大小     
    gzip_buffers 4 16k;

然后就可以启动nginx查看效果了,因为我这是测试项目,没有多少东西,所以结果时间相差不大,大家可以自行测试

                                                                未压缩的

productionsourcemap,vue.js,性能优化,前端

                                                                压缩后的

productionsourcemap,vue.js,性能优化,前端

 三、开启CDN

        CDN主要是将一些可以在CDN服务器上引用到的插件不进行打包,直接通过CDN链接,从而减小包的体积

        1、首先配置好各个链接地址

        若不知道地址是什么的可通过BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务进行查询,下面是关于cdn链接地址后缀的介绍

Vue的各种版本介绍:

1. cjs(两个版本都是完整版,包含编译器)

        vue.cjs.js

        vue.cjs.prod.js(开发版,代码进行了压缩)

2. global(这四个版本都可以在浏览器中直接通过scripts标签导入,导入之后会增加一个全局的Vue对象)

        vue.global.js(完整版,包含编译器和运行时)

        vue.global.prod.js(完整版,包含编译器和运行时,这是开发版本,代码进行了压缩)         vue.runtime.global.js

        vue.runtime.global.prod.js

3. browser(四个版本都包含esm,浏览器的原生模块化方式,可以直接通过<script type="module" />的方式来导入模块)

        vue.esm-browser.js

        vue.esm-browser.prod.js

        vue.runtime.esm-browser.js

        vue.runtime.esm-browser.prod.js

4. bundler(这两个版本没有打包所有的代码,只会打包使用的代码,需要配合打包工具来使用,会让Vue体积更小)

        vue.esm-bundler.js

        bue.runtime.esm-bundler.js

        2、找到需要的cdn链接后,进行如下配置

// 本地环境是否需要使用cdn
const devNeedCdn = false

const cdn = {
  // cdn:模块名称和模块作用域命名(对应window里面挂载的变量名称)
  externals: {
      vue: 'Vue',
      vuex: 'Vuex',
      'vue-router': 'VueRouter',
      'element-plus': 'ElementPlus',
      'axios': 'axios',
      'echarts': 'echarts'
  },
  // cdn的css链接
  css: [
    'https://cdn.bootcdn.net/ajax/libs/element-plus/2.2.12/theme-chalk/index.min.css'
  ],
  // cdn的js链接
  js: [
      'https://cdn.bootcdn.net/ajax/libs/vue/3.2.37/vue.global.min.js',
      'https://cdn.bootcdn.net/ajax/libs/vuex/4.0.2/vuex.global.min.js',
      'https://cdn.bootcdn.net/ajax/libs/vue-router/4.1.3/vue-router.global.min.js',
      'https://cdn.bootcdn.net/ajax/libs/element-plus/2.2.12/index.full.min.js',
      'https://cdn.bootcdn.net/ajax/libs/element-plus/2.2.12/locale/zh-cn.min.js',
      'https://cdn.bootcdn.net/ajax/libs/echarts/5.3.3/echarts.min.js',
      'https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js'
  ]
}
module.exports = {
    chainWebpack: config => {
        // ============注入cdn start============
        config.plugin('html').tap(args => {
        // 生产环境或本地需要cdn时,才注入cdn
        if (isProduction || devNeedCdn) args[0].cdn = cdn
        return args
    })
    },
    configureWebpack: config => {
        // 用cdn方式引入,则构建时要忽略相关资源
        if (isProduction || devNeedCdn) config.externals = cdn.externals
    }
}

然后配置你的静态资源文件,目录:public/index.html中,配置如下

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
     <!-- 使用CDN的CSS文件 -->
     <% for (var i in htmlWebpackPlugin.options.cdn &&
     htmlWebpackPlugin.options.cdn.css) { %>
     <link
             href="<%= htmlWebpackPlugin.options.cdn.css[i] %>"
             rel="stylesheet"
     />
     <% } %>
  </head>
  <body>
    <div id="app"></div>
    
    <!-- built files will be auto injected -->
  </body>
</html>
<!-- 使用CDN的JS文件 -->
<% for (var i in htmlWebpackPlugin.options.cdn &&
htmlWebpackPlugin.options.cdn.js) { %>
<script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
<% } %>

四、代码压缩

使用uglifyjs-webpack-plugin插件进行对js的代码压缩优化

安装插件  npm i -D uglifyjs-webpack-plugin

然后配置如下内容

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = defineConfig({
  configureWebpack: config => { 
    // 代码压缩
    config.plugins.push(
      new UglifyJsPlugin({
          uglifyOptions: {
            //生产环境自动删除console
            compress: {
                drop_debugger: true,
                drop_console: true,
                pure_funcs: ['console.log']
            }
          },
          sourceMap: false,
          parallel: true
      })
    )
  }
})

五、图片压缩

使用image-webpack-loader插件将图片进行压缩

此插件会将你的图片压缩到一定大小,而一些小图片会被直接压缩成base64格式

安装插件 npm install image-webpack-loader --save-dev

  我看到有些人也会使用url-loader来压缩图片,url-loader只适用于比较小的图片资源,如果图片很大会导致构建出的.js文件加载缓慢。

  一般会配置小图片使用url-loader完成,而大图片则使用image-webpack-loader进行压缩,不过我测试了一下,发现直接使用image-webpack-loader也可以直接将小图片压缩为base64,所以我这里就直接配置了image-webpack-loader,没有去进行拆分

配置如下信息

module.exports = defineConfig({
  chainWebpack: config => { 
    // ============压缩图片 start============
    config.module
    .rule('images')
    .use('image-webpack-loader')
    .loader('image-webpack-loader')
    .options({ bypassOnDebug: true })
    .end()
  }
})

目前了解的优化手段大概是这些,如果还有其他方式,还希望老板们也可以分享一下,大家相互学习!文章来源地址https://www.toymoban.com/news/detail-790073.html

到了这里,关于vue 性能优化方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最全 Vue 性能优化方案

    当涉及到 Vue 应用的性能优化时,有许多技术和策略可以帮助提升应用的性能并改善用户体验。以下总结了常用的十种 Vue 的性能优化方案: 因为 v-show 本质上是通过 css 控制元素的显示与隐藏,而 v-if 是通过操作 dom 来控制元素的显示与隐藏,频繁操作 dom 会导致性能有所影响

    2024年04月24日
    浏览(31)
  • Vue项目性能优化方案

     1、v-if和v-show的使用场景  (1)v-if适用于在运行时很少改变条件,不需要频繁切换条件的场景,属于真正的条件渲染,会确保在切换过程中,元素适当的被销毁和重建,也是惰性的;  (2)v-show适用于频繁切换条件的场景,v-show不管初始的渲染条件是什么,元素总是会被渲

    2024年02月03日
    浏览(36)
  • 极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队

    前端性能已成为网站和应用成功的关键要素之一。用户期望快速加载的页面和流畅的交互,而前端框架的选择对于实现这些目标至关重要。然而,传统的前端框架在某些情况下可能面临性能挑战且存在技术壁垒。 在这个充满挑战的背景下,我们引入了 Qwik.js 框架。Qwik.js 不仅

    2024年02月05日
    浏览(46)
  • 快速搞定前端JS面试 -- 第十二章 运行环境 (页面加载、性能优化、安全)

    4. Window.onload和DOMContentLoaded 二、性能优化 1、性能优化原则 2、如何入手性能优化 1. 资源合并 2. 缓存 3. CDN 4. SSR 5. 懒加载 6. 缓存DOM查询 7. 尽早开始JS执行 8. 防抖 9. 节流 三、安全 1. XSS跨站请求攻击 2. XSRF跨站请求伪造 问题解答 1. 从输入url到显示出页面的整个过程 2.

    2024年04月16日
    浏览(54)
  • 快速搞定前端JS面试 -- 第十二章 运行环境 (页面加载、性能优化、安全)(1)

    4. SSR 5. 懒加载 6. 缓存DOM查询 7. 尽早开始JS执行 8. 防抖 9. 节流 三、安全 1. XSS跨站请求攻击 2. XSRF跨站请求伪造 问题解答 1. 从输入url到显示出页面的整个过程 2. Window.onload和DOMContentLoaded区别 3. 为何把css放在中 4. 为何把js放在最后 5. html中css写在前js写在后的优点 6. 如何入

    2024年04月14日
    浏览(47)
  • vue前端性能优化之分包策略、异步组件、Gzip压缩

    目录 一、Gzip压缩 二、异步组件 三、分包策略 最后           项目的性能优化是有完整项目经历的开发者都会遇到得一个问题。这是整个项目开发最后的一步,也是最关键的一步,做一个项目并不是单单完成功能就算结束了,作为开发者,更要站在用户角度去进行项目体

    2024年02月09日
    浏览(51)
  • vue-productionSourceMap作用

    当其设置为false时(productionSourceMap: false) 当其设置为true时(productionSourceMap: true)  注:1.当设置为true时,打包后每个文件都有一个.map文件,其目的是为了精确定位代码错误      2.当设置为false时,可减少项目打包大小      3.正式环境禁止使用true,因为其可通过反编译.map文件,造成

    2024年02月20日
    浏览(30)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(64)
  • 前端面试:【性能优化】页面加载性能、渲染性能、资源优化

    嗨,亲爱的前端开发者!在今天的Web世界中,用户期望页面加载速度快、交互流畅。因此,前端性能优化成为了至关重要的任务。本文将探讨三个关键方面的性能优化:页面加载性能、渲染性能以及资源优化,以帮助你构建更快速、响应更快的Web应用程序。 1. 页面加载性能:

    2024年02月11日
    浏览(54)
  • 性能优化 - 前端性能监控和性能指标计算方式

    利用LightHouse进行合理的页面性能优化 这篇文章主要讲解了如何使用 Lighthouse 。 这里把相关图片再展示一下: 我们可以看到 Lighthouse 计算的时候,会根据这几个维度的指标来计算总分。那么本篇文章,就主要讲解下前端性能监控相关的重要指标含义和计算方式。 在介绍指标

    2024年02月15日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包