前端性能优化介绍与常见方法(一)

news2025/1/15 17:33:37

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~

主页: oliver尹的主页

格言: 跌倒了爬起来就好~

目录

一、前言

二、内容概述

三、页面生命周期

四、性能优化

4.1 建立http环节优化

4.2 资源的传输下载(前后端交互)

4.3 渲染优化

五、小结


一、前言

最近我司的小伙伴在项目上遇到一些问题,是关于性能上的,因此我们探讨了一些关于前端性能优化方法,因此有了本文~

耐心看完,你也许有所收获~

二、内容概述

本文先从页面的生命周期起了解整个链路过程,再针对各个过程简单概述一下可以优化的点,本文没有具体的方法,只是先概述一下,下一篇我们再具体分析各个可实现的方法,本文大致内容概述如下:

三、页面生命周期

什么是生命周期?通俗地说就是一个事物从诞生到消亡的过程,这个过程被称作生命周期,那么套用在页面上,生命周期自然指的就是页面的诞生到页面的创建完毕;

那么,不妨思考一下,页面的诞生是从什么时候开始的,是页面上开始渲染类似于Vue中的mounted吗?其实不是页面的生命周期起始,其实应该从浏览器中输入了URL开始算,直到页面渲染出来为止

大致流程如下:

当我们在浏览器输入一个url网址,那么首先浏览器会针对url创建一个 网络请求的线程,创建的过程中会对这个url进行解析,比如解析出host,解析出端口prot等等;

当创建完毕,那么自然要开始 建立http请求 了,这个请求的过程中就会有我们日常说的“3次握手,4次挥手”;

请求建立成功,后端会以数据包的形式将前端包发送到浏览器上,这个前端包就是我们日常前端开发的项目代码,主要就是Html+CSS+Javascript;

浏览器接收到数据包后开始工作,工作存在于在浏览器中的 渲染进程 ,大致这么个流程:

那这个和我们的性能优化有什么关系呢?关系肯定是有的,这个链路中的任何一个环节出现问题,体现到终端用户的感知上就是“网页打不开”,“打开的好慢”,“卡顿严重”等等问题

因此,只有知道了这个完整的链路,才能对这个链路中的各个环节进行优化,从而达到前端性能优化这个最终目的;

我们日常说的性能优化往往是针对第四个环节的,是代码层面的,但这有时候并不能解决问题,如果真的出现性能问题,那么首先要确认的是这个性能问题是在哪一个环节出现的

四、性能优化

4.1 建立http环节优化

在这个环节最主要的优化就是 减少http请求的数量,这个是优化的核心目的,最直接的手段就是 合并资源,比如,正常情况下需要发起2个http的请求来获取资源,那么是不是可以通过一些构建上的手段,将两个资源打包合并成1个,那么这样就只需要请求一次即可;

当然,减少http请求也包括使用一些懒加载的技术,比如针对图片的请求要在图片即将显示到可视区域的时候再进行请求;

再来就是http协议,当然现代浏览器这个协议都是已经升级过了,这项优化点正常情况下应该是不需要做什么了,在http1.0的协议中,“3次握手,4次挥手”的过程中需要去不断创建http请求,到了http1.1以上,那么此时的tcp是可以复用协议,但如果你的项目真的是http1.0协议,那么是该升级了...

4.2 资源的传输下载(前后端交互)

在这个环节上我们能做的优化站在前端的角度来说依然不是很多,核心的目的大致有两个:

  • 压缩资源,减少响应的数据包体积
  • 使用一些缓存技术避免重复发送请求下载资源

第一点是压缩资源,数据包减小,那么类似于Vue,React这些单页应用在 首次加载的时候白屏的时间就会短,时间越短用户就越不易感知到卡顿,项目中最常见的就是 webpack rollup 等这类工具,通过这些工具对项目的压缩,在不影响代码逻辑的情况下可以大幅减少代码体积;

此外,在打包过程中这些工具往往会同时兼职合并资源的过程,比如原本我们写了3个js文件,在进行打包后工具会自动帮助我们合并成1个工具,好好利用这些工具是优化的一个重点;

第二点是使用一些缓存技术,这些缓存技术浏览器一般会有一套默认的执行方式,因此单页应用往往只有第一次加载的时候会去请求全部资源,从第二次开始就是利用缓存了,不过这里有一点需要注意,缓存也会造成更新不及时,比如我们更新了内容,但用户在使用的时候依然还是老的资源,因此,缓存是把双刃剑,合理的设置缓存策略也是优化的一个技巧;

4.3 渲染优化

这个环节才是我们前端真正日常需要注意的地方,与上面两个环节不同,上面两个环节其实主要是利用工具,尤其是现在脚手架搭建的项目,只要合理的利用其自带的打包工具都能解决压缩,合并的问题;

但这个环节不同,它需要由我们日常写的代码来提升性能,我个人认为核心是 减少不必要的重绘和回流合理的代码编写 以及 针对不必要的变量进行手动释放

在性能吃紧的情况下高性能的操作大概率会造成浏览器的未响应,一旦出现未响应,那基本只有关掉浏览器再开这一条路了;

重绘回流相信大家都理解,这里简单解释一下后两点,合理的代码的意思不要出现一些逻辑上的错误,比如死循环,死循环一旦出现结果不用说....

接着是针对不必要的变量进行手动释放,这个我感觉日常执行基本不会到位,更多的是依赖浏览器的垃圾回收机制,比如这样:

// 通过接口获取到了一大串数据
let result = {//...后台数据}

function handle(){
  // 正对数据进行了一大串的操作
}

// 结束以后释放
result=null

当我们对这个数据进行了一大串操作以后不在需要了,那么针对result这个变量是需要手动释放的,只有这样处于缓存中的这块数据才会被清理掉不再继续留存,否则我们只能等,等到浏览器自己去执行垃圾回收机制才会被清理,虽然浏览器自己执行在绝大多数的情况下问题也不大,但....怎么说呢,垃圾回收机制只会去清理不再被使用的变量,有时候变量因为我们的编码问题会被一直被占用着,导致浏览器是不会去清理的,越积越多的内存最终导致的结果就不用多说了...

五、小结

本文主要站在整体的角度上概述了一下在整个链路上有哪些可以优化的点,大致有以下一些优化方法:

  • 加载上的优化,目的是通过减少http请求,懒加载技术,来减少首屏的加载时间;
  • 构建上的优化,目的是减少资源体积和数量,合理利用主流的构建工具,如webpack等来合并资源,压缩资源;
  • 缓存优化,目的是避免重复请求,但对于缓存的策略需要仔细斟酌,毕竟有利有弊;
  • 渲染优化,目的是降低高性能的操作,比如减少重绘和回流,合理的代码,以及及时释放资源;

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

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

相关文章

ios swift alert 自定义弹框 点击半透明部分弹框消失

文章目录 1.BaseAlertVC2.BindFrameNumAlertVC 1.BaseAlertVC import UIKitclass BaseAlertVC: GLBaseViewController {let centerView UIView()override func viewDidLoad() {super.viewDidLoad()view.backgroundColor UIColor(displayP3Red: 0, green: 0, blue: 0, alpha:…

Dubbo 服务发布注册、订阅消费 流程

一、Dubbo服务发布 dubbo的服务提供者注册一共经历以下三个阶段 1) 配置 Dubbo 框架在服务注解这个后置处理器(ServiceAnnotationPostProcessor)中,利用扫描器,把含有 DubboService 注解的类对应的 Bean 定义收集到了一块&#…

【观察】张建林:走出“舒适区”,愿做智能运维的“布道者”

在出任科来研发中心副总经理一职之前,张建林在行业内已有着非常资深的“履历”,他曾任招商银行数据中心系统运行、应用管理负责人,招行资深工程师,对应用全生命周期的智能化运维具有非常丰富的理论研究与实战经验,还曾…

世界山系、火山和地震的分布

声明:来源网络,仅供学习!

CentOS-6.3安装MySQL集群

安装要求 安装环境:CentOS-6.3 安装方式:源码编译安装 软件名称:mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下载地址:http://mysql.mirror.kangaroot.net/Downloads/ 软件安装位置:/usr/local/mysql 数据存放位…

HCIP的重发布实验

实验要求: 1 两个协议间进行多点双向重发布 2 R7的环回没有宣告在OSPF中而是后期发布进入的 3 解决环路,所有路径选择最优,且存在备份 一、IP配置 R1: R2: R3: R4: R5: R6&#…

数字万用表测量基础知识--其他DMM测量

概览 DMM(即数字万用表)是一种电气测试和测量仪器,可测量直流和交流信号的电压、电流和电阻。本文介绍如何正确使用和理解数字万用表(DMM)。 其他DMM测量 许多DMM还具有两个额外的测量功能:二极管测试和连续性测试。 连续性测试…

使用pip安装opencv,出现Cannot unpack file xxx的问题的解决

学完机器学习和深度学习后,开始学习计算机视觉,在安装opencv时出现以下问题: ERROR: Cannot unpack file C:\Users\User\AppData\Local\Temp\pip-unpack-9vgxq6np\simple.html (downloaded from C:\Users\User\AppData\Local\Temp\pip-req-bu…

英码国产高配边缘计算盒子上市!搭载TPU处理器BM1684X,适配麒麟系统,支持OTA升级!

随着人工智能技术不断深入实际应用场景,加速各行各业场景应用落地,边缘计算的重要性越发凸显。相较于传统的集中式云计算,边缘计算在距离数据源或用户更近的地方提供计算能力,不仅满足了对实时性要求较高的场景应用需求&#xff0…

汽车及汽车零部件行业云MES解决方案

汽配行业现状: 随着经济全球化进程加快,一直走在智能化改造,数字化转型前沿的汽车行业企业,面临的信息化需求也日益增加,不管德系,美系还是日系供应链的各大厂商,均将企业信息化,数字…

虚幻5中Lumen提供哪些功能以及如何工作的

虚幻引擎 5 中的 Lumen 是一个完全动态的全局照明和反射系统。它可以在虚幻引擎 5 中使用,因此创作者无需自行设置。它是为下一代控制台和建筑可视化等高端可视化而设计的。那么它提供了哪些功能以及如何工作? 全局照明 当光离开光源时,它会…

宿舍管理系统--前后端分离式项目架构流程复盘

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:【🎇前端】先创建Vue-cli项目(版本2.6.10,仅包含babel),请选择此项目并创建 【整理简化项目模板】【🎀创建路由】…

代码评审(Code Review)规范

一、目的 Code Review是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们 可以对代码、测试过程和注释进行检查。 Code Review主要用来在软件工程过程中改进代码质量,通过Code Review可以达到 如下目的: 1) 在项目早期就能够…

Nevron Diagram for .NET Crack

Nevron Diagram for .NET Crack Nevron Diagram for.NET可帮助您快速轻松地在.NET Windows窗体和ASP.NET应用程序中集成和显示复杂的图表。这是一个完整的绘图解决方案,包含许多交互功能、形状、自动布局和令人惊叹的视觉效果,并配备了现成的控件&#x…

Java代码判断ip、端口是否可用

一、简介 使用的是java自带的Socket类进行检测端口号是否可用,两个代码,一个是检测的工具类,另一个是调用工具类传递相关的的参数; 请求的结果:(当前Ip可用,端口号不可用) 二、检…

Docker容器挖矿应急实例

01、概述 很多开源组件封装成容器镜像进行容器化部署在提高应用部署效率和管理便捷性的同时,也带来了一些安全挑战。一旦开源系统出现安全漏洞,基于资产测绘就很容易关联到开源组件,可能导致被批量利用。 在本文中,我们将分享一个…

【C++】C语言基础部分知识点总结 (指针,函数,内存,关键字,预处理等)(秋招篇)

文章目录 前言讲一下32位系统常用数据类型的字节大小(stm32f103为例)讲一些C/C中常见的库什么是易变变量?代码的转化和构建通常会经历哪几个步骤:(预处理,编译,汇编,链接&#xff09…

【U8+】使用天联高级版客户端登录用友U8,指定U8服务器地址。

【问题描述】 当使用U8客户端电脑作为天联高级版软件服务器的时候, 即:U8应用服务器和远程服务器不是同一台电脑。 每次新建天高用户后, 新的天高用户,登录天高客户端后并打开U8登录界面, 用友U8的登录窗口服务器地址即…

工程项目管理软件有哪些?工程项目管理软件排名!

工程项目管理是为了实现工程项目的有效、高效和可持续管理而进行的一系列活动。 工程项目的管理就像是驾驭一艘巨大的船只,需要一位经验丰富的船长来领导整个团队。 市面上也有很多工程项目管理的软件,那么到底哪款好用?我们又该如何通过工…

Vue3引用PWA,vite-plugin-pwa的使用及注意要点

工作业务需求,需要给H5页面增加PWA功能,主要是需要有一键添加到桌面,而不是指引用户在浏览器工具栏操作。 查找了一些资料,主要是用到 Add to Home Screen,简称 A2HS,需要主要的是此方法只有部分浏览器支持…