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;
}

配置完后,记得重启

目录
相关文章
|
4天前
|
JavaScript
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
这篇文章介绍了在Vue项目中如何实现执行删除等危险操作时的二次确认机制,使用Element UI的`el-popconfirm`组件来弹出确认框,确保用户在二次确认后才会执行删除操作。
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
|
4天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
4天前
|
JavaScript
如何在Vue页面中引入img下的图片作为背景图。../的使用
这篇文章介绍了在Vue页面中如何引入`img`目录下的图片作为背景图,提供了两种使用相对路径的方法。第一种是使用`../assets/img/`作为路径引入图片,第二种是使用`../../assets/img/`作为路径。文章还展示了使用这些方法的代码实现和效果展示,并鼓励读者学无止境。
如何在Vue页面中引入img下的图片作为背景图。../的使用
|
4天前
|
JavaScript
如何查看Vue使用的版本
这篇文章介绍了如何在项目中查看Vue及其相关库的版本信息,比如element-ui和element-china-area-data。要查看Vue的版本,需要查看项目中的`package.json`文件,在`dependencies`部分可以找到Vue的版本号。如果需要查询不同版本的兼容性,可以访问相应的官方文档或资源网站。
|
4天前
|
存储 JavaScript 前端开发
Vue中如何通过三元运算符来展示不同的操作
这篇文章讲述了在Vue中如何使用三元运算符结合v-if指令来根据订单的不同状态展示不同的操作按钮,例如在待发货状态显示退款按钮,在待付款或完成状态显示删除按钮。
|
4天前
|
前端开发
StringBoot+Vue实现游客或用户未登录系统前、可以浏览商品等信息、但是不能购买商品或者加入购物车等操作。登录系统显示用户的登录名(源码+讲解)
这篇文章介绍了使用StringBoot+Vue实现用户登录状态判断的方法,包括前端加载用户信息和后端设置session的源码示例。
|
4天前
|
JavaScript 编译器
成功解决:Module build failed: Error: Vue packages version mismatch
这篇文章记录了解决Vue项目中遇到的"Module build failed: Error: Vue packages version mismatch"错误的步骤,原因是项目中Vue依赖的版本不一致,解决方法是删除`node_modules`后重新安装指定版本的Vue和`vue-template-compiler`,确保版本匹配,最终成功运行项目。
成功解决:Module build failed: Error: Vue packages version mismatch
|
4天前
|
JavaScript
在Vue中使用Avue、配置过程以及实际应用
这篇文章介绍了作者在Vue项目中集成Avue组件库的完整过程,包括安装、配置和实际应用,展示了如何利用Avue实现动态表单和数据展示的功能。
在Vue中使用Avue、配置过程以及实际应用
|
4天前
|
JavaScript
Vue devDependencies 与 dependencies 能别
Vue devDependencies 与 dependencies 能别
10 3
|
4天前
|
JavaScript
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
该博客文章介绍了如何在Vue 2框架下实现前后端分离的商品信息展示和详情页跳转,包括排序筛选、详情展示、加入购物车和分享功能。
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)