【前端】-【性能优化常识】

目录

  • 前端性能优化指标
    • 首屏速度、白屏时间
      • 性能优化
        • 收效很大的操作
        • 收效不大或者特殊情况的优化操作
    • 操作速度、渲染速度
      • 造成操作卡顿和渲染慢的场景
      • 性能优化
    • 数据缓存

前端性能优化指标

首屏速度、白屏时间

在这里插入图片描述
页面一打开的白屏时间,主要是由资源加载(耗时多)、JS执行造成的,在这段时间里,如果没有做骨架屏的话,页面都是白屏。JS执行完成后,已经知道页面要渲染什么了(此时页面已经能看到一些东西了,但是还不能看到完整的页面),就开始渲染页面,进行数据请求和DOM渲染

性能优化

收效很大的操作

一、减少首屏资源体积

  • 打包工具的压缩:webpack、vite的压缩,如webpack的tree-shaking

参考资料:webpack+vite前端构建工具全掌握

  • 异步加载:体积较大但又不是马上就需要的功能适合做异步加载,比如图片压缩功能使用了一个很大的第三方库,但该功能只在上传图片且选择选择了压缩时才会被用到,这一场景使用的第三方库很大且该功能和首屏渲染无关,可能用户都不会用这个功能,所以该功能的所有代码可以做异步加载
  • 更新为体积更小的新版本:有些老版本的库不支持tree-shaking,更新为新版本就支持了,比如xlsx0.1.2版本不支持按需引入,体积会很大,而换成最新版本就支持,可以大大减少体积

手段:按需引入配合tree-shaking可以极大的减少代码体积,一一排查项目中老版本的库,把他们升级为可以支持tree-shaking的新版本的库,优化了项目体积,加快首屏渲染

  • 能不用第三方库就不用第三库:如果只用到少量方法,尽量自己写,比如时间格式化的方法自己写可能就1k代码,没必要为了这一个方法引入一个库进来
  • 编写代码尽量减少体积:代码写得简洁

手段:将项目中使用了第三方库的工具方法改成自己写,优化重构代码,使代码精简,因此减少代码体积

  • 去除大的base64体积:打包工具会默认将小图标转成base64,这就相当于图片的体积计入JS或CSS里了,但是如果没有配置好,会将大图片也转成base64,图片(img标签)不会影响首屏的加载,因为图片(img标签)的加载不会阻塞页面的渲染,也就是DOM结构会先出来,再慢慢加载图片,所以,打的图片或者媒体资源都不要转base64。
收效不大或者特殊情况的优化操作
  • 首屏数据尽量并行,如果可行让小数据量接口合并到其他接口:
    (1)非必须不要等上一个接口请求完毕后再发下一个接口,尽量并行调用接口
    (2)如果一个接口只返回一个很小的字符串,如果后端业务允许的话,可以将其合并到其他接口中。接口请求的时间包括数据传输和三次握手的的时间,传输数据多了接口肯定会慢,为了一点点数据还要进行三次握手实属没必要。
  • 页面包含大量dom可以分批随滚动渲染:和虚拟滚动、大数据量加载是一个思想

参考视频:
el-table大数据量渲染
切片思想优化

  • 骨架屏,loading,先让屏幕不白,减少用户焦虑:有时因业务场景要求,实在是无法减少体积,加快速度了,做骨架屏和loading遮罩,让用户先看到一些东西

操作速度、渲染速度

造成操作卡顿和渲染慢的场景

  • 一次性操作大量dom
  • 进行了复杂度很高的运算(常见于循环)
  • vue和react项目中,不必要的渲染太多

性能优化

  1. 一次性操作大量dom:和前面一样,分批渲染,虚拟滚动,切片渲染等
  2. 不进行复杂度很高的运算:循环中的操作尽量精简(其实意义不大)
  3. vue和react的渲染性能

    (1)频繁切换的显隐的内容用v-show也就是display来控制隐藏,只有打开就一次性决定显示与否的用v-if不去创建
    (2)循环,动态切换内容加好key值
    (3)keep-alive缓存
    (4)区分请求粒度,减少请求范围,也能减少更新:修改了数据,要请求接口,只请求所涉及的接口,其他接口不请求

手段:很多增删改查操作后,更新页面时会一股脑的把所有接口请求一遍,对其进行重构

数据缓存

  1. 谨慎缓存接口数据。只有不变数据,定期时效可以缓存在cookies或者localstorage中,比如token,用户名等
  2. 对于接口数据,可以考虑做一个缓存队列存于内存中(全局对象,vuex)。这样能保证刷新就更新数据,也能一定程度上缓存数据

参考资料:axios二次封装

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 隐藏导航栏和菜单栏,已解决

初始效果: 效果: 出现问题: 解决方法:

Linux——进程程序替换

替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。调用exec并不创建新进程,所以调用…

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的,有个客户解密了一个js,然后又看不懂里边的一些逻辑,想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的,以及如何下载应用的。继而诞生了这篇文章,讲解一下他的基本原理。 渐进式Web应用…

C++动态内存管理:new/delete与malloc/free的对比

在C中,动态内存管理是一个至关重要的概念。它允许我们在程序运行时根据需要动态地分配和释放内存,为对象创建和销毁提供了灵活性。在C中,我们通常会用到两对工具:new/delete 和 malloc/free。虽然它们都能够完成类似的任务&#x…

人工心脏术后两个月,他给父母做了一顿饭丨心脏病专家联合访谈

假如人生即将走到尽头,你最后的愿望会是什么? 不同的人会有不同的答案。 对于陈华(化名)来说,他的愿望是亲手为父母做顿饭。 罹患心脏病多年,陈华的病情反反复复逐渐发展为终末期心衰。虽然自己与父母家仅…

PMP考试费用涨价了?或将涨至4100元!

现在国内线下笔试的PMP报名费是3900元,但最近听到消息,说国外的PMP报名费用已经确认上调(从2024年3月1日开始调整),由原本的555美元上调至575美元,根据h率换算,575美元≈4100元。既然国外的报名…

公司调研 | 空间机械臂GITAI | 日企迁美

最近做的一些公司 / 产品调研没有从技术角度出发,而更关注宏观发展:主营方向、产品介绍、商业化落地情况、融资历程、公司愿景、创始人背景等。部分调研放在知乎上,大部分在飞书私人链接上 最近较关注人形Robot的发展情况,欢迎感兴…

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…

Capture One Pro 23中文---颠覆性的图像编辑与色彩配置

Capture One Pro 23是一款功能强大且专业的RAW图像编辑处理软件。它拥有全球领先的色彩管理技术和精细的图像编辑工具,可以对图片进行多种精细调整,包括曝光、色温、对比度、锐度等,以满足用户特定的后期处理需求。此外,Capture O…

DNS 服务 Unbound 部署最佳实践

文章目录 安装unbound-control配置启动服务测试 参考: 官网地址:https://nlnetlabs.nl/projects/unbound/about/ 详细文档:https://unbound.docs.nlnetlabs.nl/en/latest/index.html DNS服务Unbound部署于使用 https://cloud.tencent.com/…

Filter、Listener、AJAX

Filter 概念:Filter 表示过滤器,是JavaWeb三大组件(Servlet、Filter、 Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感…

CentOS使用Docker部署Halo并结合内网穿透实现公网访问本地博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤:1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…

Nextcloud激活被锁用户

Nextcloud激活用户 如果docker下没有安装sudo 和 vim执行下面命令,安装了则跳过 #进入docker内部 #更新apt-get apt-get update #安装sudo apt-get install sudo #安装vim apt-get install vim 修改下面文件内容,否则执行occ命令可能报错 进入上面查询…

连接数据库(MySQL)的JDBC

目录 JDBC简介快速入门API详解DriverManager(驱动管理类)注册驱动:获取数据库连接(对象): Connection(数据库连接对象)获取执行SQL的对象管理事务 Statement(执行SQL语句)执行DML、DDL语句执行DQL语句 Resu…

轨迹预测后处理之非极大值抑制(NMS)

非极大值抑制是图像处理里面的一种算法(比如边缘检测会使用到) 轨迹预测这里借鉴了其思想,比如说对于某个场景中的某辆车,我们使用模型预测 64 条轨迹或者更多,以很好地捕获多模态性,同时每条轨迹对应一个…

JavaScript 基础、内置对象、BOM 和 DOM 常用英文单词总结

一提到编程、软件、代码。对于英语不是很熟悉的同学望而却步。其实没有想像中的难么难,反复练习加上自己的思考、总结,会形成肌肉记忆。整理一下,初学者每天30遍。 1、JavaScript 基础语法 break:中断循环或 switch 语句的执行。…

Gif动图怎么快速制作?两招教你在线做

Gif动图作为一种实用的图片格式,因为其体积小,画面丰富,所以在各大聊天软件中非常的受欢迎。小伙伴们是不是很好奇这种gif动态图片是如何制作的吧!下面,小编就给大家分享两个快速制作gif动画的小技巧!不用下…

Matlab从入门到精通课程

教程介绍 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 学习地址 链接:https://pan.baidu.com/s/1PxGarBwQusMzwPVqcE…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境,没法使用互联网上有中继服务器的远程协助工具,如teamviewer、todesk、向日癸等;在内网进行远程维护可以自己搭建中继服务…

TS + Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum

TS Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum 本文内容为 TypeScript 一、基础知识 在展示列表的时候,列表中的某个数据可能是一个类别,比如: enum EnumOrderStatus{"未受理" 1,"…