广州蓝景分享—遇到网页慢,我们该怎么办?

news2024/9/24 15:25:58

前言

移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验更是我们前端开发非常需要 focus 的东西之一。

从用户的角度而言,当打开一个网页,往往关心的是从输入完网页地址后到最后展现完整页面这个过程需要的时间,这个时间越短,用户体验越好。所以作为网页的开发者,就从输入url到页面渲染呈现这个过程中去提升网页的性能。

所以输入URL后发生了什么呢?在浏览器中输入url会经历域名解析、建立TCP连接、发送http请求、资源解析等步骤。

http缓存优化是网页性能优化的重要一环。本文主要从网页渲染过程、性能指标的解读以及CDN应用优化三个角度,并对性能定位和性能优化做一个小结。

关键词:

  1. 通过工具(如何使用工具,怎么去看)定位问题

  2. 发现问题,对应的措施(提升页面)

  3. 监控(优化的东西 是持续性,不像bug一次性解决)

本质:两大范畴:加载 和 渲染

网页渲染过程

首先谈谈拿到服务端资源后浏览器渲染的流程:

  1. 解析 HTML 文件,构建 DOM 树,同时浏览器主进程负责下载 CSS 文件

  2. CSS 文件下载完成,解析 CSS 文件成树形的数据结构,然后结合 DOM 树合并成 RenderObject 树

  3. 布局 RenderObject 树 (Layout/reflow),负责 RenderObject 树中的元素的尺寸,位置等计算

  4. 绘制 RenderObject 树 (paint),绘制页面的像素信息

  5. 浏览器主进程将默认的图层和复合图层交给 GPU 进程,GPU 进程再将各个图层合成(composite),最后显示出页面
    在这里插入图片描述

经典面试题:输入url后,浏览器做了什么?

Url 首先进行DNS解析,找到目的服务器IP,建立TCP链接,发送http请求,服务器响应网页,浏览器接收对应的文件并解析,html 和css 通过对应的解析器生成并融合的成渲染树,渲染页面。

总结出问题出现的地方:

1。加载时间过长,加载很久

  1. 解析的过程太久,导致渲染很慢

前端性能指标的建立和解读

在我们的Google浏览器中已经内置了一个perfomance的功能,

Web Vitals 是 Google 的一项举措,旨在为web质量提供统一的指导,这些指标对于在网络上提供出色的用户体验至关重要。Web Vitals为了简化场景,帮助网站专注于最重要的指标,提出了Core Web Vitals。Core Web Vitals 是 Web Vitals 的子集,包含 LCP(Largest Contentful Paint),FID(First Input Delay) 和 CLS(Cumulative Layout Shift)。

● LCP(Largest Contentful Paint):最大内容绘制,测量加载性能。为了提供良好的用户体验,LCP 应在页面首次开始加载后的2.5秒内发生。

● FID(First Input Delay):首次输入延迟,测量交互性。为了提供良好的用户体验,页面的 FID 应为100毫秒或更短。

● CLS(Cumulative Layout Shift):累积布局偏移,测量视觉稳定性。为了提供良好的用户体验,页面的 CLS 应保持在0.1或更少。

从这三个指标的含义中我们可以发现这三个指标分别从页面的加载速度,页面的交互性和页面的视觉稳定性这三个角度来衡量页面的性能。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果我们想自己采集页面的各项原始指标数据,该怎么做呢?浏览器为我们提供了原生的 Timing API

在这里插入图片描述
在这里插入图片描述

CDN介绍及工作原理

在这里插入图片描述

1、为什么要用CDN加速服务

如果一个网站(作为盈利渠道或是品牌窗口)需要吸引大流量, 以下几点因素是制胜的关键:

● 内容有吸引力

● 访问速度快

● 支持频繁的用户互动

● 可以在各处浏览无障碍

满足这些条件的前提就是:网站访问快

那么CDN就是一个加速网站访问的优秀解决方案

除此之外,CDN还有一些作用:

  1. 为了实现跨运营商、跨地域的全网覆盖

互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。

  1. 为了保障你的网站安全

CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。

  1. 为了异地备援

当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。

  1. 为了节约成本投入

使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。

  1. 为了让你更专注业务本身

CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。

优点:

● JS体积变小,使用CDN的第三方资源的JS代码,将不再打包到本地服务的JS包中。减小本地JS包体积,提高加载速度。

● 给网页加载提速

缺点:

● 请求变多

● 万一CDN资源路径有变动需要更改,建议自行搭建CDN库。

● 花钱

推荐BootCDN(有很多经过CDN加速的工具链接)

www.bootcdn.cn/

2、什么是CDN(深度) 更多的是存放分发静态内容
在这里插入图片描述

3、工作原理

在这里插入图片描述

借用阿里云官网的例子,来简单介绍CDN的工作原理。

假设通过CDN加速的域名为www.a.com,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:

当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。

LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。

当授权DNS解析www.a.com时,返回域名CNAMEwww.a.tbcdn.com对应IP地址。

域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。

LDNS获取DNS返回的解析IP地址。

用户获取解析IP地址。

用户向获取的IP地址发起对该资源的访问请求。

如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。

如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。

从这个例子可以了解到:

(1)CDN的加速资源是跟域名绑定的。

(2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP

(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。

想要了解更多关于IT前端技术问题,可以关注广州蓝景。

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

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

相关文章

计算机:理解操作系统:内存篇(中)

内存 1.堆和栈的本质是什么2. java、Python等内存模型3. java内存模型3.1 java中堆和栈是如何实现的 4. Python内存模型 什么是内存 C/C内存模型 堆区与栈区的本质 Java、Python等内存模型 Java内存模型 Jave中的堆区与栈区是如何实现的 Python内存模型 指针与引用 进程的内存…

企业网站架构部署与优化 LNMP

【安装 Nginx 服务】 systemctl stop firewalld systemctl disable firewalld setenforce 0 1、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 2、创建运行用户 useradd -M -s /sbin/nologin nginx 3、编译安装 cd /opt tar zxvf nginx-1.12.0.tar.gz -C …

Apifox软件的基础使用方式

Apifox软件的基础使用方式 简单方便的用途 该工具是接口在线调试工具,这里我给到连接供大家去官网下载,我个人觉得是比较于postman工具好用,提供的语言操作是中文版本的便于操作 下载和安装 https://apifox.com/?utm_sourcebaidu&ut…

【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】

目录 1.简介2.环境安装2.1安装torch相关库2.2 获取yolov8最新版本,并安装依赖 3. 如何使用模型用于各种CV任务3.1 目标检测任务实现检测图片代码检测视频代码 3.2 分割任务实现分割图片代码分割视频代码 3.3 追踪任务3.4 姿态检测任务姿态检测(图片&…

27.Linux网络编程 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器

基本概念叫协议 什么叫协议? 协议是一个大家共同遵守的一个规则, 那么在这个网络通信当中,其实就是双方通信和解释数据的一个规则,这个概念 你也不用记,你只要心里明白就可以了, 分层模型, 物数网传会表应…

Tensorflow GPU 版本安装教程

非常详细的 Tensorflow GPU 版本安装教程 一、安装Anaconda二、TensorFlow GPU 一、安装Anaconda 这一步比较简单,也没有太多的需要注意的,去官网下载即可: 官网地址如下: https://www.anaconda.com/blog/individual-edition-2…

百家云在人工智能领域再有新动作,发布应用于多个行业的AIGC解决方案

4月17日消息,音视频SaaS上市公司百家云(股票代码:RTC)今日宣布,公司将正式推出应用于多个垂直行业及场景的人工智能生成内容及视频解决方案。 百家云总裁马义表示,此次发布的解决方案,将在极短…

谷歌SEO优化技巧方法

谷歌SEO排名对于许多公司和个人来说都非常重要。随着谷歌成为人们搜索信息的首选,拥有良好的谷歌排名可以帮助我们的网站在搜索引擎中展现出更高的可见度,吸引更多的访问量和潜在客户。优化谷歌SEO排名需要一定的时间和专业知识,无法一蹴而就…

Vulnhub项目:Lin.Security(Linux提权大合集)

靶机地址:linsecurity 靶机描述了用户名和密码 用户名:bob、密码:secret 登录后看到了IP地址,或者在kali上像之前那样进行ip收集,端口收集 开放的端口有很多,从22端口开始,知道用户名和密码&…

供水管网爆管预测模型研究现状

配水管网是供水系统中最昂贵的组成部分。管网运行管理和调度技术难度高,爆管事故 容易发生,对人民生活、工业生产、城市交通及社会安定造成不利影响,造成严重的经济损 失。合理的管道的修复更新计划是满足供水目标、实现对管网的科学管理的重…

回炉重造五--软件管理

1.软件管理 1.1软件包中的文件分类 二进制文件库文件配置文件帮助文件 1.2包查询–rpm -a:所有包 -p:针对尚未安装的程序包文件做查询工作 -l:查看指定的程序包安装后生成的所有文件 -i:查看包的信息 #常用的查询方法 -qa/q/qi2、yum和dnf 2.1 yum/dnf工作原理…

数据库基础篇 《5. 排序与分页》

目录 1. 排序数据 1.1 排序规则 1.2 单列排序 1.3 多列排序 2. 分页 2.1 背景 2.2 实现规则 2.3 拓展 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC ( ascend ) : 升序 DESC ( descend ) : 降序 ORDER …

【Java 数据结构】栈的实现及相关OJ题

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Flutter 通过 VS code 连接 Android 模拟器(Windows)

环境配置 Flutterhttps://flutter.cn/docs/get-started/install/windowsAndroid Studiohttps://developer.android.google.cn/studioVS code安装Flutter插件https://flutter.cn/docs/get-started/editor?tabvscode夜神模拟器https://www.yeshen.com 注意事项 Flutter安装之…

第五章_Redis事务

是什么 官网 能做什么 一个队列中,一次性、顺序性、排他性的执行一系列命令 Redis事务 VS 数据库事务 1 单独的隔离操作 Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可…

【浅学 Linux】

浅学 Linux 一、 Linux1. 目录2. 虚拟机的设置2.1 克隆与快照 3.系统与设置命令3.1 用户相关命令3.2 用户组3.3 管理用户组内成员3.4 日期管理3.5 显示用户3.6 id命令&sudo命令3.7 进程相关的命令top 查看进程ps 查看进展kill 杀死进程 4. Linux目录管理4.1 关机与重启命令…

RIP协议(路由信息协议)简介

一.动态路由简介 1.动态相对静态路由来说,找路更灵活,相互传递 2.分类: 二.RIP协议简介 1.三个版本RIPV1和RIPV2 (在IPV4中使用), RIPNG (在IPV6中使用) 2.原理简介 三.配置 1.启用Rip 并指定进程ID (进程ID 只具有本地意义…

即插即用! | 国防科大联合慕尼黑工业大学提出新型解耦头 TSCODE: 引入yolov5/yolov7助力目标检测器轻松涨点!

1.Task-Specific COntext DEcoupling, TSCODE 介绍 论文:https://arxiv.org/pdf/2303.01047.pdf 本文提出了一种新颖的即插即用的特定于任务的上下文解耦头(Task-Specific COntext DEcoupling, TSCODE),通过进一步解开两个任务的特征编码来提升网络整体的性能 TSCODE整体的…

SYSU程设c++(第九周)函数对象、友元函数、友元类

函数对象: 如果一个类定义了operator()运算符函数,则可以使用该类的对象名为函数名调用这个函数. 函数对象是一个对象,但调用形式和普通函数调用一样,因此取名叫函数对象 (注意operator()先有个括号,接着才是括号(参数…

XHR 和 AJAX 的结合 - API 测试

大家好,之前一期介绍了怎样通过工具类进行对API 接口测试,这一期将演示如何手写一个 Ajax的请求。 什么是 XHR ? 全称为 XMLHttpRequest ,它是浏览器内置的对象,使得 JavaScript 可以发送 HTTP 请求。 什么是Ajax ? Ajax是一种用…