web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)

news2024/11/20 0:11:15

1.性能优化包含的方面

优化性能概念宽泛,可以从信号、系统、计算机原理、操作系统、网络通信、DNS解析、负载均衡、页面渲染。只要结合一个实际例子讲述清楚即可。

2.什么是性能?

Web 性能是客观的衡量标准,是用户对加载时间和运行时的直观体验。

Web 性能指页面加载到可交互和可响应所消耗的时间,以及页面在交互时的流畅度——滚动是否顺滑?按钮能否点击?弹窗能否快速打开,动画是否平滑?

Web 性能既包括客观的度量如加载时间,每秒帧数和到页面可交互的时间;

也包括用户的对页面内容加载时间的主观感觉。 

3.如何进行Web性能优化?

1. 首先需要了解性能指标 - 多块才算快?---》如从请求到页面渲染完毕从多少时间减少到了多少时间

2. 使用专业的工具可量化的评估出网站或应用的性能表现(第三方插件)

3. 从网站页面响应的生命周期,分析出造成较差性能表现的原因

4. 进行技术改造,可行性分析等具体的优化实施---》(如大数据量加载;资源文件进行CDN缓存等)

5. 迭代优化---》(一个模块一个模块不断优化)

4.web性能报告——lighthouse

Lighthouse分析web应用程序和web页面,收集关于开发人员最佳实践的现代性能指标和见解,让开发人员根据生成的评估页面,来进行网站优化和完善,提高用户体验。

5.Lighthouse的使用方式

1. 使用google浏览器自带工具Lighthouse

2. 在google应用商店下载扩展程序

Lighthouse会从5个维度给出打分:检测得分 性能指标 优化建议 诊断结果及已通过的性能

经过检测,Lighthouse会对上述5个维度给出0~100的评估得分,得分能到达90分以上,则说明网站应用在该方面的评估表现符合最佳实践,如下图所示:

整个评测结果会给出优化建议,将从下面几点说明

1. **移除阻塞渲染的资源**,

部分javascript脚本文件和样式表文件可能会阻塞系统通对网站页面的首次渲染,建议可将其以内嵌的方式引用,并考虑延迟加载。报告中会将涉及需要优化的资料文件排列在下面,每个文件还包括尺寸大小信息和优化后预计提升首屏渲染时间的效果,据此可安排资源文件优化的优先级

如elementui很多资源都是放在CDN里面,当使用elementui时就很可能遇到CDN服务器挂掉的时候,就可以将elementui资源通过内嵌script方式进行引入,当然elementui资源很多,实际开发中不可能直接引入,就可以通过npm下载包的形式引入

2. **预连接所需要请求的源**,

提前建立与所要访资源之间的网络连接,有两种方式。第一种是设置(link rel="preconnect")的预连接,另一种是设置(link rel="dns-prefetch")的DNS预解析。

3. **降低服务端的响应时间**

资源请求时,浏览器会发出get请求

图片资源收到同源策略影响,但是是运用了资源嵌入式请求,所以不会有跨域问题

网络查看里面如果区分ajax请求和fetch请求?network里面的type形式,ajax的type是xhr

服务器本身限制:带宽(浏览器和服务器之间传输速度),内核(服务器性能,响应快慢),内存(超过内存就会变慢)

高并发一般在后端,前端比如秒杀活动,太多人点击按钮

4. **适当调整图片大小**

除此之外,报告还给出诊断结果,同理以下几个维度来说明

1. **对静态资源文件使用高效的缓存策略** 

比如对图片,css,js文件的缓存。如使用浏览器缓存;使用CDN静态资源缓存

2. **减少主线程的工作**

 浏览器在渲染主进程时需要处理大量工作:比如解析HTML构建DOM,解析css样式表文件和执行javascript文件。所以渲染进程的主线程繁忙会导致用户响应延迟的不良体验,在Lighthouse中会提供主线程对各个任务的执行耗时,让开发者可以针对异常处理过程进行有目标的优化

3. **减少http请求数**

如10张图片请求十次和将10张图做成一张图成一张图

针对图片:

对于小型的图片,比如不超过10kb的转化为base64,再通过background-image进行引入

大型图片:适当范围内进行压缩,产品接受范围内

小型icon图标:传统模式使用精灵图;字体图标形式(图标矢量库:放大缩小不会失真)

5.浏览器缓存策略

 强缓存

  - 不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。

  - Cache-Control

    - public 表示响应可以被客户端和代理服务器缓存

    - private 表示响应只可以被客户端缓存

    - max-age=30 缓存30秒后过期,需要重新请求

    - s-maxage=30 覆盖max-age,作用一样,只在代理服务器中生效

    - no-store 不缓存任何响应

    - no-cache 资源被缓存,但是立即失效,下次会发起请求验证资源是否过期

    - max-stale=30 30秒内,即使缓存过期,也使用该缓存

    - min-fresh=30 希望在30秒内获取最新的响应

  -  Expires

    - 缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和Last-modified结合使用。Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

    **缺点**受限于本地时间,如果修改了本地时间,可能会造成缓存失效

- 强缓存的两个状态(network中的size属性中进行查看:页面首次打开从服务器获取,刷新后会从memory cache中读取,如果这个页面不关闭然后重新打开一个窗口访问刚才的同一个地址,会从disk cache中读取;都读取不到就会去服务器读取)

  - from memory cache

   - 不访问服务器,一般已经加载过该资源且缓存在了内存当中,直接从内存中读取缓存。浏览器关闭后,数据将不存在(资源被释放掉了),再次打开相同的页面时,不会出现from memory cache。

  - from disk cache

    - 不访问服务器,已经在之前的某个时间加载过该资源,直接从硬盘中读取缓存,关闭浏览器后,数据依然存在,此资源不会随着该页面的关闭而释放掉下次打开仍然会是from disk cache。

协商缓存

  - 协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存,主要有以下两种情况:

    - 协商缓存生效,返回304和Not Modified(比强缓存会慢一些)

    - 协商缓存失效,返回200和请求结果 

6.精炼js代码

代码复用

减少业务复杂度

算法上优化(网站——力扣)

  - 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

动态规划

动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。

- 适用情况

 - 最优子结构

    最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。

 - 无后效性。

    即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响

 - 子问题重叠

     子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

6. 一道面试题:从浏览器地址栏输入URL后,到页面渲染出来,整个过程都发生了什么?

1、首先浏览器在输入URL之后,会先解析URL,判断是否合法;

2、合法的话会查看浏览器缓存,判断是否有缓存,如果有缓存,则显示;

3、如果没有缓存,浏览器会向服务器发送HTTP协议,会进行DNS解析,获取IP地址;

4、浏览器和服务器进行TCP连接,进行三次握手;

5、握手成功之后,浏览器会向服务器发送http请求,请求数据包;

6、服务器处理请求,将数据返回给浏览器;

7、浏览器收到HTTP响应后,会解析它;

8、浏览器发送异步请求,然后渲染页面

可以做到性能优化的点

  • 发出请求之前,对页面事件(滚动等)进行优化
  • 获取到数据后,部分,分页渲染
  • 资源文件缓存
  • 代码优化等

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

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

相关文章

微信小程序框架---详细教程

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 ,越幸运。 目录 1.框架 1.1响应的数据绑定 1.2.页面管理 1.3.基础组件 1.4.丰富的 API 2.视图层 View 2.1.介绍 …

大量pod失败

随便查看pod 有的pod提示磁盘不足 查看csi-nfs 的pod。有一个处于Evicted 状态 kubectl get pod -n kube-system csi-nfs-node-jlxc6 3/3 Running 10 (4d16h ago) 20d csi-nfs-node-vnr5q 0/3 Evicted 0 10m 查看这个pod。提示磁盘不足 kubectl describe pod -n kube-system…

低代码技术这么香,如何把它的开发特点发挥到极致?

前言 什么是低代码技术? 低代码是一种可视化软件开发方法,通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化,消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选?用友Yonbu…

14.8 Socket 一收一发通信

通常情况下我们在编写套接字通信程序时都会实现一收一发的通信模式,当客户端发送数据到服务端后,我们希望服务端处理请求后同样返回给我们一个状态值,并以此判断我们的请求是否被执行成功了,另外增加收发同步有助于避免数据包粘包…

docker基础认知(镜像+容器+仓库+客户端与服务器)

镜像(Image) 静态文件,提供了容器运行时所需的程序、库、资源、配置等文件,另外包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。(相比文件的说法,文件系统的说…

Mac电脑空间不足怎么办?如何优化系统

随着使用时间的增长,我们会发现Mac电脑的存储空间越来越少,这时候我们就需要对Mac电脑进行清理,以释放更多的存储空间。那么,Mac空间不足怎么解决呢? 1.清理垃圾文件 Mac空间不足怎么解决?首先要做的就是…

Go语言入门心法(七): 并发与通道

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一: go语言并发与通道

身份证照片怎么弄成200k以内?三个方法轻松搞定!

在日常生活中,为了方便上传和保存、便于传输和处理以及符合相关规定等方面的考虑,身份证照片大小常常被要求控制在200k以内,可是手机随便一拍,任凭如何截图都在超过1M,这个时候就需要借助一些图片压缩工具,…

汽车电子 -- CAN报文接收解析和发送组包

之前已经讲过如何生成DBC文件了,程序中该如何解析DBC呢? 其中包括接收CAN报文解析和发送CAN报文组包?? 一、Motorola和Intel格式 dbc里的信号Signals,其中里面有两种数据格式 Motorola和Intel格式。 之前C语言里&…

win11点击任务栏固定的应用:该文件没有与之关联的应用来执行该操作

点击固定在任务栏的任何图标提示 1、直接点击“开始”旁边的搜索按钮,搜索“注册表编辑器”。 2、找到HKEY_CLASSES_ROOT\lnkfile(注意“lnkfile”的l是小写L不是大写i),在右侧新建一个字符串值“IsShortcut”的文件&#xff1…

大模型的背景与现状问题

一、大模型的发展背景 谈起大模型,第一时间想到的是什么?是主流的ChatGPT?或者GPT4?还是DALL-E3?亦或者Midjourney?以及Stablediffusion?还是层出不穷的其他各类AI Agent应用工具?大…

攻防千层饼

近年来,网络安全领域正在经历一场不断升级的攻防对抗,这场攻防已经不再局限于传统的攻击与防御模式,攻击者和防守者都已经越发熟练,对于传统攻防手法了如指掌。 在这个背景下,攻击者必须不断寻求创新的途径&#xff0…

【C++】头文件chrono

2023年10月16日,周一晚上 当前我只是简单的了解了一下chrono 以后可能会深入了解chrono并更新文章 目录 功能原理头文件chrono中的一些类头文件chrono中的数据类型一个简单的示例程序小实验:证明a的效率比a高 功能 这个chrono头文件是用来处理时间的…

git log 美化配置

编辑 vim ~/.gitconfig 添加配置 [alias]lg log --graph --abbrev-commit --decorate --dateformat:%m-%d %H:%M:%S --formatformat:%C(bold blue)%h%C(reset) - %s %C(bold yellow)% d%C(reset) %n %C(dim white) (%ad) - %an%C(reset) --allgit lg 效果

Ansible脚本进阶---playbook

目录 一、playbooks的组成 二、案例 2.1 在webservers主机组中执行一系列任务,包括禁用SELinux、停止防火墙服务、安装httpd软件包、复制配置文件和启动httpd服务。 2.2 在名为dbservers的主机组中创建一个用户组(mysql)和一个用户&#x…

Cesium Vue(三)— 相机配置

1. 坐标系转换 1.1 cesium使用到的坐标系 屏幕坐标系,二维的笛卡尔坐标系,API > Cartesian2地理空间坐标系,WGS-84坐标系, API > Cartographic(经度,维度,高度)三维笛卡尔空间直角坐标系&#xff0…

华为交换机S200, S1700系列产品命名规则

华为交换机的全系列产品命名规则如下: S系列:代表固定端口交换机。例如,S5720系列、S6720系列。CE系列:代表企业级交换机。例如,CE5800系列、CE6800系列。CloudEngine系列:代表华为云引擎交换机&#xff0c…

如何实现 Es 全文检索、高亮文本略缩处理(封装工具接口极致解耦)

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口(支持父类属性的复杂映射)Trans 接口可优化的点高亮全局配置类如下真实项目落地效果为什么不用 numOfFragments、fragm…

数据结构与算法课后题-第五章(哈夫曼树和哈夫曼编码)

文章目录 选择题1选择题2选择题3选择题4选择题5选择题6选择题7应用题7 选择题1 选择题2 选择题3 需要深究 选择题4 选择题5 选择题6 选择题7 应用题7

【LeetCode刷题(数组and排序)】:存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 示例 1: 输入:nums [1,2,3,1] 输出:true 示例 2: 输入:nums [1,2…