VUE学习:十二.性能优化

sadwind2024-02-29笔记263

前言

总结一些项目开发中常见的优化技巧,优化的目的不仅能使代码结构更加清晰,加快开发编译速度,而且也能提高线上代码的性能

#1.懒加载

#2.dllplugin

#3.整合模块

  • 多页应用中入口文件相同的配置需要整合







     
     
     
     
     
     






    // main.jsimport Vue from "vue"import App from "./index.vue"import router from "./router"import store from "@/store/"import { Navigator } from "../../common"if (process.env.NODE_ENV !== "production") {
      var VConsole = require("vconsole/dist/vconsole.min.js")
      var vConsole = new VConsole()
      Vue.config.performance = true}Vue.$openRouter = Vue.prototype.$openRouter = Navigator.openRouternew Vue({
      router,
      store,
      render: (h) => h(App),}).$mount("#app")
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
  • 1.封装代码

    import { Navigator } from "../index"export default (Vue) => {
      if (process.env.NODE_ENV !== "production") {
        var VConsole = require("vconsole/dist/vconsole.min.js")
        var vConsole = new VConsole()
        Vue.config.performance = true
      }
      Vue.$openRouter = Vue.prototype.$openRouter = Navigator.openRouter}
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 2.多页中使用






     






    import Vue from "vue"import App from "./index.vue"import router from "./router"import store from "@/store/"import entryConfig from "_lib/entryConfig/"entryConfig(Vue)new Vue({
      router,
      store,
      render: (h) => h(App),}).$mount("#app")
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

#4.gzip 压缩

  • 在 webpack 生产环境中增加 Gzip 压缩配置,实现了打包后输出增加对应的.gz 为后缀的文件,减少文件传输大小,提高性能








     
     
     
     
     
     
     






    /* vue.config.js */const isPro = process.env.NODE_ENV === 'production'...configureWebpack: config => {
      if (isPro) {
        return {
          plugins: [
            new CompressionWebpackPlugin({
              asset: '[path].gz[query]',// 目标文件名称。[path] 被替换为原始文件的路径和 [query] 查询
              algorithm: 'gzip',// 使用 gzip 压缩
              test: new RegExp('\\.(js|css)$'),// 处理与此正则相匹配的所有文件
              threshold: 10240,// 只处理大于此大小的文件
              minRatio: 0.8,// 最小压缩比达到 0.8 时才会被压缩
            })
          ]
        }
      }}...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
  • 在 Nginx 开启 Gzip 压缩配置

    http {
      # 开启gzip
      gzip on;
    
      # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
      gzip_min_length 1k;
    
      # gzip 压缩级别 1-10
      gzip_comp_level 2;
    
      # 进行压缩的文件类型。
    
      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;}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

#5.webpack  的优化

  • 1.简化路径

    • 1.可以提高性能而且能够非常友好的对于开发者和协同人员进行阅读

    • 2.能避免使用../路径出错的风险(当页面大量拷贝文件到其他目录使用时相对路径会报错)

    • 简化路径的好处:

    • 案例参考:2.简化路径

  • 2.全局样式

#5.1.开发环境中

  • HRM (热替换)

  • soure-map (调试)

  • size-plugin(监控打包资源的体积变量化)

  • speed-measure-webpack-plugin(分析 loader 和 plugin 打包的耗时)

  • webpack-bundle-analyzer(打包生成代码块分析视图)










     







    /* vue.config.js */const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPluginconst isPro = process.env.NODE_ENV === 'production'module.exports = {
      ...
      configureWebpack: config => {
        if (isPro) {
          return {
            plugins: [
              new BundleAnalyzerPlugin()// 使用包分析工具
            ]
          }
        }
      },
      ...}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

#5.2.生产环境中

  • 体积优化

  • css 提取(mini-css-extract-plugin)

  • css 压缩 (optimize-css-assets-webpack-plugin)

  • html 压缩 (html-webpack-plugin )

  • externals (排除不需要被打包的第三方)

  • js 压缩 (production 模式自动开启)

  • tree-shake ( production 模式自动开启(webpack4 限 EsModule;webpack5 不限 EsModule,CommonJs,优秀得很) )

  • code-split ( optimization )

  • import(懒加载,预加载(预加载慎用))

  • 打包速度优化

  • 多线程打包(thread-loader 、happyPack)

  • 动态链 ( DLL )

  • babel 缓存( 缓存 cacheDirectory )

  • exclude / exclude (排除一些不需要编译的文件)

  • module.noParse (排除不需要被 loader 编译的第三方库)

#6.图片压缩

当图片比较大时(如:大于 1M),可以先在压缩网站将图片体积压缩,然后使用 https://imagecompressor.com/zh/(opens new window)

  • 缩略图

  • base64 压缩图片

#7.keep-alive

<template>
  <div id="app">
    <keep-alive :include="includedComponents">
      <router-view></router-view>
    </keep-alive>
    <bottom-tab></bottom-tab>
  </div></template>
1
2
3
4
5
6
7
8

#8.减少响应式数据

  • Object.freeze

  • 减少 watch 数量,可以用一个 watch 进行深度监听一个对象数据

总结

通过对 vue 相关性能优化的了解,可以知道项目中一些常见的需要优化的点,如提高项目构建速度的一些方式、提高页面载入速度的一些方式


relate content

VUE学习:十一.Mock 数据

VUE学习:十一.Mock 数据

前言前后端同时开发的时候,后端接口数据没有出来,前端可以 mock 假数据,模拟开发,无需等待后的开发完成接口规范(成功,失败,状态码,安全) 和后端约定Postman 一款非常流行的 API 调试工...

VUE学习:一.开发工具

VUE学习:一.开发工具

前言了解前端项目开发中环境的相关配置,工具的相关使用技巧等,有助于快速解决开发时遇到的各种问题,提高开发效率#1.Node.js注意实际开发中团队中 node 版本最好保持一致,包括各种环境(dev、...

VUE学习:十三.代码管理

前言前端开发中对代码的处理:代码的存储、代码的管控、代码的提交与合并#1.代码仓库以gitlab 为例配置 ssh权限#2.代码管理简单项目分支dev:开发分支,直接在 dev 上进行开发,测试环境没...

扩展 layui 的导出插件 layui.excel

就像下面说的一样,遇到问题。https://gitee.com/zypy333/layui-excel之前在工作过程中还有社区交流过程中,发现对导出 Excel 文件有需求,所以就萌发了封装插件的想法...

使用字符串匹配 屏蔽一下搜索关键词

总是有些不怀好意的人,使用一些SQL注入词来尝试搜索,真想对这些人说一句,去你妈的。网站会记录搜索词,我不想记录这些数据,同时也想单独对这些人做一个提示页面,就将一些常用SQL注入字符做个数组,然后跳...

TP6 一条数据库查询代码 column索引值理解

// 返回数组 Db::table('think_user')->where('status',1)->column('name'...

Post Reply    

◎Welcome to participate in the discussion.