快速响应:提升前端页面加载速度技巧的必知策略方案

在本文中,我们将深入探讨导致页面加载缓慢的常见原因,并分享一系列切实可行的优化策略,无论你是刚入门的新手,还是经验丰富的开发者,这些技巧都将帮助你提升网页性能,让你的用户体验畅快无阻。

        相信作为前端开发者的我们,无论是在平时工作还是日常学习当中,一旦项目的逻辑较为复杂或者项目代码繁多的时候就可能会遇到页面加载很慢或者在进行页面某个交互的时候,这一个交互可能就需要页面等待很久才会完成,这个时候就需要我们前端开发来进行优化它(管他个鸟,程序能跑就行,优化是不可能滴😁),那么作为前端开发我们该如何对其进行优化?这是博主今天要讲的知识!

目录

🧐时间构成

🤓性能分析

😎解决思路

🧐时间构成

在对前端进行性能优化找到最实用的排查方案前,我们应先了解一个页面的产生加载所需要的时间包括我们进行的一些操作所花费的时间,无非主要是以下三部分组成,当然还有一些细微的时间花费比如说:TCP连接时间、DNS解析时间等,这些就不需要再提了,主要还是以下三部分:

👉页面加载时间组成

1)资源加载(占据主要时间)

2)代码执行(可能会延长时间,取决于代码本身)

3)页面绘制(通常占据较少时间)

那当我们发现一个页面加载或者操作的时候很慢,我们就需要排查其是因为资源加载缓慢、还是代码执行缓慢、还是页面绘制缓慢。以后遇到的网站加载缓慢只要排查过这三点并发现和处理导致网站缓慢的原因,基本上就会对我们网站的一个运行效率进行一定程度上的优化。

🤓性能分析

这里我们以腾讯视频为例来讲解一下如何发现导致网站缓慢加载的原因,因为腾讯视频也是采用了常见的vue框架进行开发,也是比较贴近我们大家大部分的工作,这里我们就以其进行举例吧!

首先我们先F12打开我们的网页控制台,然后进入到我们的性能分析的这个面板,如果你是英文面板的话就是Performance,这里我们就以中文面板举例,点击左上角的录制按钮进行页面录制:

然后刷新页面,等待刷新页面中的符号从叉号又重新变成刷新符号的时候,我们就可以点击控制台的停止按钮,这样就代表着整个页面已经加载完毕了,然后控制台就会分析页面加载的整个报告,

我们从控制台给出的报告就能知道我们网站整个的执行一共再哪些地方花费多少时间:

第一次使用控制台性能分析这个模块的朋友,看到上面控制台的分析报告,内容花里胡哨的可能就会看的比较懵,这个分析报告其实大部分东西我们没必要知道是啥,只需要挑出我们需要知道的重点就可以了,如下所示:

资源加载:打开网络模块,该模块我们可以详细的看到每一条资源所花费的时间,由于腾讯视频当中图片和视频还是挺多的,可以看到网站资源加载的时间还是稍微有点高的,这个可以理解!

代码执行与页面绘制:如果我们发现资源很快就加载完毕但是页面很慢,这个时候我们就需要了解一下是否是JS代码执行的问题导致的!通过下面的摘要模块我们可以看到我们的执行脚本所花费的时间,当然也包括了页面渲染的时间:

除此之外我们也可以勾选性能分析模块中的屏幕截图和内存按钮然后再重新录制,我们勾选上这两个按钮之后就可以看到网站的每一个时间点的屏幕的当前截图以及它的一个内存占用情况。

如下图所示可以看到有一个屏幕截图在这个地方,我们可以清晰地看到每一个时刻当前网站屏幕的单层状态是什么,

然后我们可以鼠标点击选中屏幕截图的一部分,控制台就会给我们展示当前这一部分中所产生的资源、代码以及页面绘制的时间消耗,更加细致的分析某一个时间段内产生时间消耗,如下所示:

如果我们想分析对页面进行某个交互的时候,我们也可以通过性能分析面板进行处理,通过点击屏幕录制,然后进行页面的某项操作,当操作完成之后点击控制台中的停止录制的按钮即可对我们当前进行的页面交互所产生的时间消耗问题进行分析。

如下我们通过录制一下我们从首页切换到动漫频道的操作,来进行分析我们当前所产生的时间消耗,当我们切换到动漫频道的时候,图片资源以及代码执行所花费的时间我们也都能看到:

当然除了控制台的性能分析,我们也可以通过代码来实现以数据化的形式查看页面的各种时间,其方法为:window.performance,即在项目中的index.html写入一段脚本,通过方法对象来查看各种数据,如下我们在控制台输入该函数回车:

从上图我们可以看到该函数打印了相关的数据,例如memory:代表内存;timing:代表各种各样的时间点,这里我们可以在我们项目的index.html中插入一段脚本,如下给后端发送一段请求然后把window.performance作为数据传输给后端,后端拿到数据之后就可以知道各个用户在访问网站的时候所花的一些性能时间,从而知晓我们的项目在用户的电脑上表现如何。

当然我们也可以采用一些性能分析的第三方工具进行操作,举例如下:

1)lighthouse:可视化测评网站性能

2) web-vitals:js库测量

😎解决思路

如果出现资源加载时间较长的情况,作为前端我们该如何处理这个问题呢?这里博主提供一些简单的思路,后期通过更加详细的文件来讲解如何细致的处理:

1)定位资源:如果你通过上面讲解的性能分析查看到了资源加载占据较大时间的情况下,你就需要定位到底是哪一个资源文件过大延迟了加载时间导致网站变得缓慢了,如果存在了一些大文件但不是网站刚开始加载的时候就必须全部需要的,这里我们可以采用异步加载的方式。举例类似图片懒加载。

2)tree-shaking:利用tree-shaking去尽量减少我们的代码体积,需要做到再引入其他第三方库的时候尽量采用按需引入,然后把一些低版本的库升级到按需引入的版本。

3)gzip压缩:一般我们用nginx返回资源的时候会进行自动的压缩

4)构建工具压缩:利用构建工具对代码进行压缩,这个我们在对项目进行打包的时候也是自动进行了。

如果出现代码执行加载时间较长的情况,作为前端我们该如何处理这个问题呢?这里博主提供一些简单的思路,后期通过更加详细的文件来讲解如何细致的处理:

一般情况下js代码执行是很难导致执行时间过长的,出现代码执行较长的情况通常只有使用了大量的循环操作导致我们js代码执行缓慢,这个时候我们往往需要去测量到底是哪段代码导致了代码执行的时间加载较长,从而来进行优化。那么我们如何在js代码中去精确测量到底是哪段代码导致了时间加载过长呢?其执行化的时间是多少?这里我们给出了两种方案,如下:

console.time:浏览器支持性能好但是精度测量较差!示例代码如下所示,两个console函数用于测量两个点之间代码执行时间的浏览器控制台函数:

<script setup lang="ts">
import { onMounted } from 'vue'onMounted(() => {console.time()for (let i = 0; i < 10000; i++) {let div = document.createElement('div')div.innerHTML = `hello ${i}`}console.timeEnd()
})
</script>

如下代码,通过测量代码执行的时间可以看到代码一般都执行在15ms作用,而当我把向div添加元素内容的代码注释掉之后可以看到代码执行的时间则变为2ms左右,由此可以得出当删除逻辑代码中不必要的代码可能会大大提高代码的执行效率:

performance.now:更加精确但是浏览器支持性能可能会出现问题!(一般推荐这个),示例代码如下:

<script setup lang="ts">
import { onMounted } from 'vue'onMounted(() => {let a = performance.now() // 执行到这段代码,此时此刻的时间for (let i = 0; i < 10000; i++) {let div = document.createElement('div')div.innerHTML = `hello ${i}`}let b = performance.now() // 执行到这段代码,此时此刻的时间console.log(b - a) // 计算出这段代码前后执行的时间差值,即执行时间
})
</script>

注意:上面的测量方式,仅仅是测量同步的时间,逻辑代码中的异步操作所产生的时间消耗是不会被算进结果里面的,所以即使你在逻辑代码中设置了一个定时器,得到的计算结果还是同步时间的结果,和你异步设置的多少的时间执行没有任何关系,这里需要注意。

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

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

相关文章

网页与微信小程序:一场轻量化应用的博弈

网页与微信小程序&#xff1a;一场轻量化应用的博弈 在如今的信息时代&#xff0c;移动互联网已然成为主流&#xff0c;而在这一趋势的驱动下&#xff0c;应用形态也在不断演变。微信小程序与传统网页&#xff0c;作为两种不同的应用形态&#xff0c;正如两条并行却又交织的道…

PY+MySQL(等先完成mysql的学习)

第一章&#xff1a;准备工作&#xff08;重点关于mysql&#xff09; win安装 下载&#xff1a; 网址&#xff1a;MySQL :: Download MySQL Community Server版本&#xff1a;我的是8.0&#xff0c;但是建议5.7 下载&#xff1a;安装&#xff0c;因为是zip文件所以直接解压就好了…

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…

模版结构体没有可用成员(C3203)

没有typedef模版结构体而导致。 并且_tables[index]无法访问HashData内部的成员。

任务管理与守护进程【Linux】

文章目录 进程组前台进程&后台进程守护进程daemon 进程组 组长是多个进程的第一个&#xff0c;组长进程的标识是&#xff0c;其进程组ID等于其进程ID 前台进程&后台进程 前台进程&#xff1a;能获取键盘输入&#xff0c;即拥有键盘文件 后台进程&#xff1a;不能获取…

无人机之激光避障篇

无人机的激光避障技术是通过激光传感器来感知和避开周围障碍物的一种高级技术。以下是关于无人机激光避障技术的详细解析&#xff1a; 一、技术原理 激光避障技术利用激光束的直线传播和反射特性&#xff0c;通过发送激光束并接收反射回来的信号&#xff0c;来检测和计算周围障…

Unity数据持久化4——2进制

概述 基础知识 各类型数据转字节数据 文件操作相关 文件相关 文件流相关 文件夹相关 练习题 using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine;public class Exercises1 : MonoBehaviour {/…

Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 "随着…

【d45】【Java】【力扣】203.移除链表元素

思路 由于删除操作&#xff0c;需要&#xff1a;pre.nextcur.next 但是单链表无法获得 前面节点&#xff0c; 所以&#xff1a;定义指针 cur 指向当前节点&#xff0c;判断cur.next 的val值&#xff0c;是否等于传入的val值 cur &#xff1a;从head 到倒数第二个 最后单独…

【大屏方案】可视化综合展示系统解决方案(Word原件2024)

2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.2.数据查询过程设计 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&…

理解JAVA中的Native内存追踪(NMT)机制

JVM 具有多个内部内存区域。本机内存(native)跟踪 (NMT) 通过提供每个内存区域的详细信息&#xff0c;帮助 Java 开发人员识别这些内部内存区域上的内存泄漏、内存过度使用和其他相关问题。在本文中&#xff0c;让我们学习如何使用 NMT 来解决与 JVM 内存相关的问题。 什么是本…

旺店通ERP集成用友U8(旺店通主供应链)

源系统成集云目标系统 用友U8介绍 用友U8是一套企业级的解决方案&#xff0c;可满足不同的制造、商务模式下&#xff0c;不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用&#xff0c;并延伸客户管理至客户关系管理&#xff08;CRM&#x…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

Java语言程序设计基础篇_编程练习题***18.32 (游戏:骑士的旅途)

目录 题目&#xff1a;***18.32 (游戏:骑士的旅途) 习题思路 代码示例 输出结果 题目&#xff1a;***18.32 (游戏:骑士的旅途) 骑士的旅途是一个古老的谜题&#xff0c;它的目的是使骑从棋盘上的任意一个正方 形开始移动&#xff0c;经过其他的每个正方形一次&#xff0c;如…

Vue3:v-model实现组件通信

目录 一.性质 1.双向绑定 2.语法糖 3.响应式系统 4.灵活性 5.可配置性 6.多属性绑定 7.修饰符支持 8.defineModel使用 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 一.性质 在Vue3中&#xff0c;v-model指令的性质和作用主要体现在…

【漏洞复现】Casbin casdoor static 任意文件读取漏洞

漏洞描述 Casdoor 是 Casbin 开源社区推出的基于 OAuth 2.0 / OIDC 的中心化的单点登录(SSO)身份验证平台。 Casdoor static 存在任意文件读取漏洞,攻击者通过发送特殊的请求包可以获取服务器中的敏感文件。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵…

【第十一章:Sentosa_DSML社区版-机器学习分类】

目录 11.1 逻辑回归分类 11.2 决策树分类 11.3 梯度提升决策树分类 11.4 XGBoost分类 11.5 随机森林分类 11.6 朴素贝叶斯分类 11.7 支持向量机分类 11.8 多层感知机分类 11.9 LightGBM分类 11.10 因子分解机分类 11.11 AdaBoost分类 11.12 KNN分类 【第十一章&…

vue3+Element-plus el-input 输入框组件二次封装(支持金额、整数、电话、小数、身份证、小数点位数控制,金额显示中文提示等功能)

一、效果图 二、组件集成了以下功能 1、输入金额--支持千分号显示、可设置decimalLimit来调整小数点位数 2、金额鼠标移入提示中文--标签添加isTip开启中文提示则不允许开启千分号显示showThousands 3、输入手机号--设置inputTypephone 4、输入整数---设置inputTypeinteger 5、…

spring boot admin集成,springboot2.x集成监控

服务端&#xff1a; 1. 新建monitor服务 pom依赖 <!-- 注意这些只是pom的核心东西&#xff0c;不是完整的pom.xml内容&#xff0c;不能直接使用&#xff0c;仅供参考使用 --><packaging>jar</packaging><dependencies><dependency><groupId&g…

【图像检索】基于灰度共生矩的纹理图像检索,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于灰度共生矩的纹理图像检索&#xff0c;用matlab实现。 一、案例背景和算法介绍 …