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

news2024/9/21 14:35:48

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

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

目录

🧐时间构成

🤓性能分析

😎解决思路

🧐时间构成

在对前端进行性能优化找到最实用的排查方案前,我们应先了解一个页面的产生加载所需要的时间包括我们进行的一些操作所花费的时间,无非主要是以下三部分组成,当然还有一些细微的时间花费比如说: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.coloradmin.cn/o/2152585.html

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

相关文章

【JavaEE精炼宝库】HTTP | HTTPS 协议详解

文章目录 一、HTTP 简介二、HTTP 协议格式&#xff1a;2.1 抓包工具的使用&#xff1a;2.2 HTTP 请求报文格式&#xff1a;2.3 HTTP 响应报文格式&#xff1a;2.4 HTTP 协议格式总结&#xff1a; 三、HTTP 请求详解&#xff1a;3.1 刨析 URL&#xff1a;3.2 方法(method)&#…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像&#xff0c;针对苹果 M 芯片 Mac 用户&#xff08;ARM 架构&#xff09;提供良好支持。Tiny11 内置了众多优化特性&#xff0c;如更小的安装体积和更快的启动速度&#xff0c;特别适合有特殊需求或老机型的用户。用户可…

centos 安装VNC,实现远程连接

centos 安装VNC&#xff0c;实现远程连接 VNC(Virtual Network Computing)是一种远程控制软件&#xff0c;可以实现通过网络远程连接计算机的图形界面。 服务器安装VNC服务 yum install -y tigervnc-server*启动VNC服务&#xff0c;过程中需要输入连接密码 vncserver :1查看…

2024华为杯研究生数学建模C题【数据驱动下磁性元件的磁芯损耗建模】思路详解

问题一 励磁波形分类 励磁波形作为影响磁芯性能的核心要素之一&#xff0c;其形态深刻影响着磁芯的损耗特性。励磁波形的独特形状直接塑造了磁芯内部磁通的动态行为&#xff0c;不同的波形轮廓影响了磁通密度随时间的变化速率&#xff0c;导致其损耗特性呈现出显著差异。因此&…

ESP32本地大模型对话机器人制作教程

整体架构 在本地电脑部署好Ollama服务&#xff0c;安装qwen大模型和llama3.1大模型。 ESP32接入局域网&#xff0c;用户通过串口给esp32发送问题&#xff0c;esp32打包json后向ollama服务发送请求&#xff0c;ollama返回响应&#xff0c;esp32解析结果并通过串口打印出来。 …

MavenMyBatis

Maven&MyBatis 目标 能够使用Maven进行项目的管理能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Maven Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准…

24最新Stable Diffusion 本地部署教程!

前言 1.前言&#xff1a; 最近看Stable Diffusion开源了&#xff0c;据说比Disco Diffusion更快&#xff0c;于是从git上拉取了项目尝试本地部署了&#xff0c;记录分享一下过程~ 这里是官网介绍&#xff1a;https://stability.ai/blog/stable-diffusion-public-release 嫌弃…

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!

环境介绍 每人搭建的环境不一样&#xff0c;情况不一样&#xff0c;但是原因都是下面几种&#xff1a; wvp配置不当网络端口未放开网络不通 我搭建的环境&#xff1a; WVP服务&#xff1a;windows下&#xff0c;用idea运行的源码 ZLM服务&#xff1a;虚拟机里 问题描述 1.…

计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法。本文主要探讨计算机视觉领域中人脸关键点特征智能提取的技术方法。详细介绍了基于卷积神经网络模型进行人脸关键点提取的过程&#xff0c;包括使…

基于springboot学生健康管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 进入21世纪以来&#xff0c;随着经济水平的高速发展&#xff0c;人们的生活质量有了很大提升&#xff0c;物质和精神生活得到了极大满足。但人们的健康水平却情况堪忧。据不完全统计&#xff0c;全国近七层人口处于亚健康状态&a…

数据结构(Day18)

一、周学习内容 1、9.18 数据结构&#xff08;Day15&#xff09;-CSDN博客 2、9.19 数据结构&#xff08;Day16&#xff09;-CSDN博客 3、9.20 链表 目的 插入删除不需要移动任何节点&#xff08;元素&#xff09;。 不需要预估存储空间大小&#xff0c;长度动态增长或减小。…

Linux文件IO(六)-多次打开同一个文件

大家看到这个小节标题可能会有疑问&#xff0c;同一个文件还能被多次打开&#xff1f;事实确实如此&#xff0c;同一个文件可以被多次打开&#xff0c;譬如在一个进程中多次打开同一个文件、在多个不同的进程中打开同一个文件&#xff0c;那么这些操作都是被允许的。本小节就来…

PyRosetta打分函数介绍

在 PyRosetta 中,蛋白质结构的能量是通过打分函数(ScoreFunction)来评估的,这些打分函数基于 Rosetta 的能量方程。Rosetta 的能量函数是一种加权的分项能量表达式,包括不同的能量项来描述蛋白质的构象、相互作用和能量。核心能量函数的形式如下: 在 PyRosetta 中,打分函…

神经网络推理加速入门——一个例子看懂流水

之前的两篇文章介绍了流水这一技术&#xff0c;它用来进行程序的性能加速&#xff0c;本篇通过一个生活中的小例子&#xff0c;让大家更直观的了解什么是流水。 举个例子 早晨从起床到上班出门&#xff0c;我们一般会做以下几件事&#xff1a;刷牙、烧水、喝水、出门。 如果…

应届生必看 | 毕业第一份工作干销售好不好?

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

都2024年了,看谁还不会用AI作图?这个全方位的系统教程真的别错过了!

大家好&#xff0c;我是画画的小强 如果给我们现在所处的时代一个标签&#xff0c;相信很多人都会选择人工智能。 其实&#xff0c;关于 AI 的讨论已经不局限在科学家和算法工程师之间&#xff0c;更多的是在各行各业的从业者之间&#xff0c;甚至也出现在了高考试卷中。 以…

多旋翼无人机维修、组装、调试技术详解

多旋翼无人机作为现代航拍、农业植保、物流运输等领域的重要工具&#xff0c;其性能的稳定性和操作的便捷性对于任务的完成至关重要。因此&#xff0c;掌握多旋翼无人机的维修、组装与调试技术&#xff0c;对于无人机操作员及维修人员来说至关重要。本文将详细介绍这三个方面的…

96 kHz、24bit 立体声音频ADC芯片GC5358描述

概述&#xff1a; GC5358 是一款高性能、宽采样率、立体声音频模数转换器。其采样率范围是8KHz~96KHz&#xff0c;非常适合从消费级到专业级的音频应用系统。单端模拟输入不需要外围器件。GC5358 音频有两种数据格式&#xff1a;MSB对齐和 I2S 格式&#xff0c;和各种如 DTV、D…

将Java程序打包成EXE程序

Java制作可执行jar 方式一&#xff1a;mainClass与lib分离 1&#xff09;将Java程序依赖的所有jar都拷贝在lib目录下&#xff0c;并添加到classpath中 2&#xff09;运行时指定MainClass pom.xml 这个pom.xml生成的jar可双击直接运行&#xff0c;但是因为没有将其依赖的jar…

焦化行业的变革力量:智能巡检机器人

根据相关数据&#xff0c;2024年1-2月份&#xff0c;焦炭产量为8039.5万吨&#xff0c;同比增长2.1%&#xff0c;这表明&#xff0c;我国焦化行业仍是全球最大的焦炭生产国和消费国&#xff0c;其市场规模占据了重要地位。焦化企业主要集中在山西省&#xff0c;其合计焦炭产能约…