Vue性能优化

news2024/10/2 8:00:43

目录

    • Vue性能优化的必要性:
    • Vue项目优化工具
      • webpack-bundle-analyzer
        • webpack-bundle-analyzer作用:
        • webpack-bundle-analyzer用法:
        • webpack-bundle-analyzer运行:
        • webpack-bundle-analyzer使用:
    • vue项目性能优化
      • 代码模块化
      • 懒加载
      • 减少缓存的使用
      • 防抖节流器
      • 条件渲染
      • 按需引入
      • 周期函数


Vue性能优化的必要性:

Vue框架通过双向数据绑定和虚拟DOM技术,帮我们处理了前端开发中最脏最累的DOM操作部分,其本身的性能已经非常强大了,但是在一个Vue项目中还是有一定的优化空间的,性能优化可以使整个网站的访问速度更快,运行更加流程,资源占用消耗更少,降低后续运营成本,所以Vue性能优化还是很有必要的。

Vue项目优化工具

webpack-bundle-analyzer

官网地址:https://github.com/webpack-contrib/webpack-bundle-analyzer

webpack-bundle-analyzer作用:

  1. 可以看到你的项目内有哪些内容
  2. 可以找出各个模块在项目中占用的大小
  3. 找到出现错误的模块
  4. 性能优化

webpack-bundle-analyzer用法:

  1. 引入

    在控制台中输入安装webpack-bundle-analyzer。

    npm run i webpack-bundle-analyzer
    
  2. 配置 vue.config.js
    在vue.config.js文件中加入

    const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
    
    module.exports = defineConfig({
      configureWebpack: (config) => {
        config.plugins.push(new BundleAnalyzerPlugin());
      }
    })
    
  3. 配置package.json
    在package.json中的scripts中加入

    "analyzer": "cross-env use_analyzer=true npm run build"
    

webpack-bundle-analyzer运行:

在控制台中输入npm run analyzer就可以直接运行了

webpack-bundle-analyzer使用:

在这里插入图片描述

vue项目性能优化

代码模块化

可以将常用的组件进行封装成单独的组件,例如列表、级联选择器,时间选择器、树型控件等等,具体封装的方法我在之前有去发布封装方法及思路。

  • vue + elemen可远程搜索select选择器的封装
  • vue+element 支持模糊搜索的多选下拉列表封装
  • vue+element DatePicker日期选择器封装(可自定义快捷选择时间)
  • 基于vue+Element Table 表格的封装

除了组件以外还有我们的Css也可以通过less和sass的自定义css变量来减少重复代码,并且将定义的less和sass作为单独的全局文件在main.js中引入,大大提高了样式的复用性,还可以保证全局的样式设计统一。

懒加载

懒加载是性能优化最重要的部分主要包含两个:
路由懒加载:

 { //分析页
        path: 'analyse', 
        component: ()=>import(["@/views/Analyse"],resolve),
        meta:{
          title:'分析页',
          path:"/analyse"
        }
      },  
      { //文章
        path: 'article', 
        component: ()=>import(["@/views/Article"],resolve),
        meta:{
          title:'文章',
          path:"/article"
        }
      },
      { //团队
        path: 'team', 
        component: ()=>import(["@/views/Team"],resolve),
        meta:{
          title:'团队',
          path:"/team"
        }
      },

图片懒加载:

安装vue-lazyload

npm i vue-lazyload

使用:

 <a href="javascript:;"><img v-lazy="'/static/img/abc.jpg'"></a>

减少缓存的使用

尽量减少缓存的内容(localStorage、sessionStorage、cookie),缓存一般用于存储用户的个人信息以及登录信息,在登录时进行赋予,退出登录时进行删除,在需要使用时进行调用,除此之外的传参应该交给router或者vueX等。

这里以token为例展示用法

//添加token
localStorage.setItem('token', 'Beareradmin')
//调用token
localstorage.getItem('token')
//清除token
localStorage.removeItem('token')

防抖节流器

在频繁触发的组件内增加防抖节流器,例如监听浏览器窗口变化或者是输入框的模糊搜索这些频繁触发函数的地方加入防抖节流器,在一定时间内只允许触发一次,具体的实现方法我在之前的文章也有提过。

  • vue 防抖节流器

条件渲染

主要是针对于v-if与v-show的渲染机制,在频繁切换显示的场景使用v-show,切换比较少的情况下采用v-if,因为v-show的删除是伪删除,只是给组件增加了display:none的属性将其隐藏,在频繁使用的情况下如果使用了v-if则会反复渲染反复删除组件,而v-if则是真删除,将整个组件彻底删除,释放该内存,所以适合在使用比较少的情况下使用。

按需引入

按照需求引入组件,这里以Element为例,我只需要引入Input,Select的情况下,只需要:

import { Input,Select } from 'element-ui'
Vue.use(Input)
Vue.use(Select)

周期函数

合理使用周期函数,在组件、变量不需要使用的阶段进行销毁,或者赋值为null。

  • 深度解读生命周期函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tensorflow入门图像分类-猫狗分类-安卓

最近在温习 Tensorflow&#xff0c;写了一篇笔记&#xff0c;记录了使用 Tensorflow 训练一个猫狗图像分类器的模型并在安卓应用上使用的全过程。 一、数据集准备 1.1 数据集来源 我采用的是微软的猫狗数据集&#xff0c;链接&#xff1a;Download Kaggle Cats and Dogs Datas…

2023华中杯数学建模C题完整模型代码

已完成全部模型代码&#xff0c;文末获取。 摘要 随着工业化和城市化的快速发展&#xff0c;空气污染已经成为全球性的环境问题。细颗粒物&#xff08;PM2.5&#xff09;等污染物对人类健康、生态环境和社会经济造成了严重影响。本研究旨在深入探究影响PM2.5浓度的主要因素&a…

【Android入门到项目实战-- 8.4】—— 如何解析JSON格式数据

目录 一、准备工作 二、使用JSONObject 三、使用GSON 比起XML&#xff0c;JSON的主要优势在于它的体积更小&#xff0c;在网络上传输的时候可以更省流量&#xff0c;但缺点是语义性较差&#xff0c;看起来不直观。 一、准备工作 还是使用前面文章的方法&#xff0c;在服务器…

【C++】STL标准库之vector

STL标准库之vector vector类的简介常用的vector类的接口构造容量遍历及访问增删查改迭代器迭代器失效问题 vector类的简介 vector是大小可变数组的序列容器&#xff0c;与string相比&#xff0c;vector中可以存任何类型的数据&#xff0c;而string中存储的只能是字符类型。 因为…

第二十九章 使用消息订阅发布实现组件通信

PubSubJS库介绍 如果你想在React中使用第三方库来实现Pub/Sub机制&#xff0c;PubSubJS是一个不错的选择。它是一个轻量级的库&#xff0c;可以在浏览器和Node.js环境中使用。 PubSubJS提供了一个简单的API&#xff0c;可以让你在应用程序中订阅和发布消息。你可以使用npm来安…

大数据Doris(十):Doris基础介绍

文章目录 Doris基础介绍 一、基本概念 二、建表语法及参数解释 1、column_definition_list 2、index_definition_list 3、engine_type 4、key_type 5、table_comment 6、partition_desc 7、distribution_desc 8、rollup_list 9、properites 三、数据类型 Doris基础…

java合并数组的方法

在 Java中&#xff0c;数组是一种重要的数据结构&#xff0c;在 Java中数组的操作方式有两种&#xff0c;一种是直接使用数组来操作&#xff0c;另一种是通过引用计数或者双指针对数组进行操作。对于直接使用数组来操作的方式&#xff0c;我们可以通过两个方法来实现。 一种是将…

C++(多态中)

目录&#xff1a; 1.多态实现原理&#xff08;再剖析&#xff09; 2.析构函数加virtual 3.C11新增两个关键字 override 和 final 4.重载、覆盖&#xff08;重写&#xff09;、隐藏的对比 5.抽象类 1.多态实现原理&#xff08;再剖析&#xff09; 实现出多态的效果&#xff0c;我…

Docker之Docker Compose技术

目录 一、什么是docker compose? 二、安装docker compose 三、使用案例&#xff1a;部署一个简单的fastapi服务 (以下教程是基于环境已将安装了docker服务) 一、什么是docker compose? Compose是一个将多个docker容器组合部署的技术&#xff0c;能通过编写yaml配置文件…

IJCAI2023 | A Systematic Survey of Chemical Pre-trained Models(化学小分子预训练模型综述)

IJCAI_A Systematic Survey of Chemical Pre-trained Models 综述资料汇总(更新中&#xff0c;原文提供)&#xff1a;GitHub - junxia97/awesome-pretrain-on-molecules: [IJCAI 2023 survey track]A curated list of resources for chemical pre-trained models 参考资料&…

『python爬虫』09. bs4实战之下载精美壁纸(保姆级图文)

目录 爬取思路代码思路1.拿到主页面的源代码. 然后提取到子页面的链接地址, href2.通过href拿到子页面的内容. 从子页面中找到图片的下载地址 img -> src3.下载图片 3. 完整实现代码总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&…

docker 非持久化存储 tmpfs mounts

docker 非持久化存储 tmpfs mounts 简介tmpfs mounts 限制--tmpfs 和 --mount 之间的差异在容器中使用 tmpfs mounts指定 tmpfs 选项 简介 官方文档&#xff1a;https://docs.docker.com/storage/tmpfs/ 与 volume 和 bind mounts 不同&#xff0c;tmpfs mounts 是临时的&…

jdk中juc多线程编程工具

jdk线程池实现原理分析 目录 CompletionService CompletableFuture 基本原理 CompletableFuture的接口 静态方法 handle() vs whenComplete() xxxEither() 异常处理exceptionally() 获取任务结果 结束任务 Semaphore CyclicBarrier CountDownLatch jdk线程池实…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 4 Mining Data Streams

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 4 Mining Data Streams &#x1f4a1; Skip this chapter due to its difficulty and for me, it is hard to understand. Summary of Chapter 4 The Stream Data Model: This model assumes da…

【微机原理】半导体存储器

目录 一.半导体存储器的分类 二、半导体存储器性能指标 三、半导体存储器的结构 一.半导体存储器的分类 半导体存储器的分类方法有很多种。 1.按器件原理来分&#xff1a;有双极型存储器和MOS型存储器。 双极型&#xff1a;速度快、集成度低、功耗大MOS型&#xff1a;速度慢、集…

“ 探索迷局:解密广度寻路算法 “

专栏文章&#xff0c;自下而上 数据结构与算法——二叉搜索树 数据结构与算法——深度寻路算法 数据结构与算法——二叉树实现表达式树 数据结构与算法——树(三指针描述一棵树&#xff09; 数据结构与算法——栈和队列&#xff1c;也不过如此&#xff1e; 数据结构与算法——八…

C++的智能指针

文章目录 1. 内存泄漏1.1 什么是内存泄漏1.2 内存泄漏分类 2. 为什么需要智能指针3. 智能指针的使用及原理3.1 RAII3.2 使用RAII思想设计的SmartPtr类3.3 让SmartPtr像指针一样3.3 SmartPtr的拷贝3.4 auto_ptr3.5 unique_ptr3.6 shared_ptr3.6.1 shared_ptr的循环引用3.6.2 wea…

MYSQL-数据库管理(上)

一、数据库概述 一、数据库基本概念 1.1 数据 1&#xff09; 描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是杂乱无章的。…

机器学习之分类决策树与回归决策树—基于python实现

大家好&#xff0c;我是带我去滑雪&#xff01; 本期为大家介绍决策树算法&#xff0c;它一种基学习器&#xff0c;广泛应用于集成学习&#xff0c;用于大幅度提高模型的预测准确率。决策树在分区域时&#xff0c;会考虑特征向量对响应变量的影响&#xff0c;且每次仅使用一个分…

vs编译生成动态库

说明 windows版本&#xff0c;vs2019 创建一个动态库 新建一c项目&#xff0c;创建一个dll类型项目。 在头文件中添加一个mylib.h文件&#xff1a; #pragma once#ifndef MYLIB_H #define MYLIB_Hextern "C" __declspec(dllexport) void Hello(); extern "C…