vue项目打包优化

简介: vue项目打包优化

vue性能优化的那些事

首屏性能优化

vue项目进行性能优化,可以从以下几个方面入手:

  • 优化打包体积
  • 路由懒加载
  • 图片懒加载
  • 静态资源CDN

接下来,让我们来一一聊下:

优化项目打包体积

这个就不用赘述了,.原理就是通过webpack进行一个gzip打包

路由懒加载

路由懒加载就是在我们使用到这个路由的时候才去加载
在router.js中
以前是:

import Home from '../views/Home.vue'
{
  path: "/login",
  name: "login",
  component: Home,
  meta: {
    title: "登录页",
  },
}

换成懒加载

{
  path: "/login",
  name: "login",
  component: () => import("../views/login/login.vue"),
  meta: {
    title: "登录页",
  },
}

图片懒加载

我在网上看到的一个比较不错的方案

<img src="https://i.loli.net/2017/08/08/5989307b6c87b.gif" data-xxx="${data.content[i].url}">

let images = document.querySelectorAll('img[data-xxx]')
for(let i = 0; i <images.length; i++){
  if(/* 出现在屏幕里(images[i]) */){
  // 一般判断这个高度用到高度有:浏览器高度,文档高度,滚动的高度
    images[i].src = images[i].getAttribute('data-xxx')
    images[i].removeAttribute('data-xxx')
  }
}

静态资源CDN

网站上所有的静态图片以及css和公用的js文件(如jq)都可以放cdn上面,图片这些完全可以上传到OSS对象存储上去,然后前端一个url引用就可以了.

vue打包优化

屏蔽掉项目的console.log

为什么需要过滤console.log?

在我们日常的开发过程中,console.log经常用于打印变量或者日志.但是当我们打包项目进行部署的时候,这些东西肯定不希望被用户看到,所以肯定要先把所有的console.log删除,如果我们一个一个console删的话,是非常大的工作量,幸好,我们可以通过很简单的配置就可以在打包项目的时候屏蔽掉所有的console

如何进行配置?

1.安装插件

npm install terser-webpack-plugin --save-dev

2.配置vue.config.js

打开根目录下的vue.config.js,如果没有就新建个.添加以下配置:

module.export = {
  configureWebpack: (config)=> {
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
    }
  }
}

优化打包体积

打包过vue项目的同学都知道,一个很简单的页面,打包出来的js也可能到几百k,如果是稍微大点的项目,那可不得了,瞬间到几M大.很明显,用户请求这么大的资源会严重影响体验,所以,有没有一个办法可以将我们打包后的体积缩小呢?有,那就是gzip.

前端需要干的事情

首先安装compression-webpack-plugin npm i compression-webpack-plugin
然后,到前端项目根目录的vue.config.js中去引入插件

const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']

然后添加配置

  configureWebpack: (config) => {
    if (process.env.NODE_ENV === "production") {
      config.plugins.push(
        new CompressionWebpackPlugin({
          filename: "[path].gz[query]",
          algorithm: "gzip",
          test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
          threshold: 10240,
          minRatio: 0.8,
        })
      );
    }
  }

完整的配置是:

const path = require("path");
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']

module.exports = {
  ...
  configureWebpack: (config) => {
    // 压缩打包
    if (process.env.NODE_ENV === "production") {
      config.plugins.push(
        new CompressionWebpackPlugin({
          filename: "[path].gz[query]",
          algorithm: "gzip",
          test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
          threshold: 10240,
          minRatio: 0.8,
        })
      );
    }
  }
  ...
};

前端需要做的事情就这些,然后就可以开心的npm run build
可以发现

 File                                    Size              Gzipped

  dist\js\chunk-vendors.c7009e9b.js       819.98 KiB        219.07 KiB
  dist\js\chunk-a01fb474.0382d40e.js      362.91 KiB        124.43 KiB
  dist\js\chunk-23562f52.3e2452a7.js      29.79 KiB         12.49 KiB
  dist\js\app.0dc23b38.js                 6.16 KiB          2.50 KiB
  dist\js\chunk-0b48facb.ba5d6037.js      2.83 KiB          1.21 KiB
  dist\js\chunk-eb4844f4.01be346c.js      0.49 KiB          0.34 KiB
  dist\js\chunk-2d0e93d2.b5a32012.js      0.31 KiB          0.26 KiB
  dist\js\chunk-2d0c8d95.13101597.js      0.31 KiB          0.26 KiB
  dist\js\chunk-2d0c795c.78156126.js      0.29 KiB          0.24 KiB
  dist\lib\env.js                         0.06 KiB          0.08 KiB
  dist\css\app.5f0aaa59.css               241.31 KiB        44.11 KiB
  dist\css\chunk-23562f52.d3405d23.css    1.94 KiB          0.64 KiB
  dist\css\chunk-0b48facb.76a5254c.css    1.92 KiB          0.60 KiB
  dist\css\chunk-eb4844f4.679c8099.css    0.08 KiB          0.08 KiB

压缩效率是非常高的,可以大大的节省我们在浏览器中加载页面的时间

后端需要做的事情

当然,前端打包成了gz格式的文件,Nginx是需要配置才能生效的
打开Nginx安装目录的config下的nginx.conf


http:{ 
      gzip on; 
      gzip_static on;
      gzip_buffers 4 16k;
      gzip_comp_level 5;
      gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg 
                 image/gif image/png;
}

配置完后,记得重启

目录
相关文章
|
3天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
3天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex
|
9天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
8天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
13 2
|
8天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
12 2
|
8天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
9天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
9天前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
9天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
10天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。