当前位置: 首页 > news >正文

Chrome 开发者工具

Chrome 开发者工具

  • 介绍
  • 控制面板
    • 时间线
    • 下载信息概要
    • 请求列表
      • 单个请求时间线
      • 优化时间线上耗时项
  • lighthouse 插件
    • Performance(性能指标)
    • Accessibility(可访问性)
    • Best Practices(最佳实践)
    • SEO(搜索优化)
  • Performance 面板
    • 认识配置面板
    • 认识报告页
      • 概览面板
      • 性能面板

介绍

Chrome 开发者工具非常重要,所蕴含的内容也是非常多的,熟练使用它能让你更加深入地了解浏览器内部工作原理。

控制面板

在这里插入图片描述

时间线

时间线主要用来展示 HTTP、HTTPS、WebSocket 加载的状态和时间的一个关系,用于直观感受页面的加载过程。如果是多条竖线堆叠在一起,那说明这些资源被同时加载。至于具体到每个文件的加载信息,还需用到详细列表。

请添加图片描述

下载信息概要

下载信息概要面板中,需要关注两点:

  • DOMContentLoaded 事件发生后,说明页面已经构建好 DOM 了,这就意味着构建 DOM 所需要的 HTML 文件、JavaScript 文件、CSS 文件都已经下载完成了
  • Load 说明浏览器已经加载了所有的资源(图像、样式表等)

通过这个下载信息概要面板可以查看触发这两个事件所花费的时间。

在这里插入图片描述

请求列表

单个请求时间线

看一个请求的详细流程,可以看它的时间线面板
在这里插入图片描述

  1. 第一个是 Queuing,也就是排队的意思,当浏览器发起一个请求时,会有很多原因导致该请求不能被立即执行,需要排队等待(首先,页面中的资源是有优先级的,比如 CSS、HTML、JavaScript 等都是页面中的核心文件,所以优先级最高;而图片、视频、音频这类资源就不是核心资源,优先级就比较低。通常当后者遇到前者时,就需要“让路”,进入待排队状态。其次,浏览器会为每个域名最多维护 6 个 TCP 连接,如果发起一个 HTTP 请求时,这 6 个 TCP 连接都处于忙碌状态,那么这个请求就会处于排队状态。最后,网路进程在为数据分配磁盘空间时,新的 HTTP 请求也需要短暂的等到磁盘分配结束。)
  2. 等待排队完成之后,就要进入发起连接的状态了。不过在这之前,还有一些原因可能导致连接过程被推迟,这个推迟就表现在面板中的 Stalled 上,它表示停滞的意思。
  3. 如果使用了代理服务器,还会增加一个 Proxy Negotiation 阶段,也就是代理协商阶段,它表示代理服务器连接协商所用的时间
  4. 接下来就是是 Initial connection/SSL阶段,也就是和服务器建立连接的阶段,还需要一个额外的 SSL 握手时间,这个过程主要用来协商一些加密信息
  5. 和服务器建立好连接之后,网络进程会准备请求数据,并将其发送给网络,这就是 Request sent 阶段。通常这个阶段非常快,因为只需要把浏览器缓冲区的数据发送出去就结束了,并不需要判断服务器是否接收到。
  6. 数据发送出去后,接下来就是等待接收服务器第一个字节的数据,这个阶段称为 Waiting(TTFB),通常也称为"第一时间",是反映服务器端响应速度的重要指标(它包含了 TCP 连接时间、发送 HTTP 请求时间和获得响应消息第一个字节时间。如果 TTFB 时间过大,说明服务器性能较差)
  7. 接收到第一个字节之后,进入陆续接收完整数据的阶段,也就是 Content Download,这意味着第一字节时间到接收到全部响应数据所用的时间

优化时间线上耗时项

  1. Queuing 时间过长
    Queuing 时间过长,大概率是由浏览器为每个域名最多维护 6 个连接导致的。基于这个原因,可以让 1 个站点下面的资源放在多个域名下面,比如放到 3 个域名下就可以支持 18 个连接了,这种方法称为域名切片技术。另外,因为 HTTP2 已经没有每个域名最多维护 6 个 TCP 连接的限制了,所以把站点升级到 HTTP2 也不失为一个方法。
  2. TTFB 时间过长
    可能的原因有: 服务器生成页面数据的时间过长(对于动态网页来说,服务器收到用户打开一个页面的请求时,首先要从数据库中读取该页面所需的数据,然后把这些数据传入到模板中,模板渲染后再返回给用户,这个处理过程中,可能某个环节出现问题)、网络的原因(使用了低带宽的服务器等)、发送请求头时带上了多余的用户信息(比如一些不必要的 Cookie 信息,服务器接收到这些信息之后可能需要对每一项都做处理,加大了服务器的处理时长)
    针对每一项采取对应措施,例如通过增加各种缓存技术来提高服务器处理速度、使用 CDN 缓存静态文件来解决网络问题、尽量减少不必要的 Cookie 数据信息等。
  3. Content Download 时间过长
    可能是字节数太多的原因导致的,可以减少文件大小,比如压缩、去掉源码中不必要的注释等。

lighthouse 插件

chrome 浏览器中添加扩展程序 lighthouse,结合页面加载过程来观察页面指标数据

在这里插入图片描述

脚本执行结束,渲染进程判断该页面的 DOM 生成完毕,于是触发 DOMContentLoad 事件。等所有资源都加载完成之后,再触发 onload 事件。

在这里插入图片描述

Performance(性能指标)

在这里插入图片描述

  1. First Paint (FP)
    当渲染进程确认要渲染当前的请求后,渲染进程会创建一个空白页面,我们把创建空白页面的这个时间称为 FP
    然后渲染进程继续请求关键资源(关键资源包括了 JavaScript 文件和 CSS 文件,因为关键资源会阻塞页面的渲染,所以需要等待关键资源加载完成后,才能执行进一步的页面绘制。脚本的执行会修改 DOM,引发重绘和重排等操作)
  2. First Contentful Paint (FCP)
    首次内容绘制,浏览器首次绘制来自 DOM 的内容的时间,这是用户第一次开始看到页面内容,但仅仅是内容,并不意味着它是有用的内容(例如 Header、导航栏等)。
  3. Time to Interactive (TTI)
    网页第一次完全达到可交互状态的时间点,浏览器可以持续性的响应用户的输入。
  4. Speed Index(首屏时间)
    速度指数是一个表示页面可视区域中内容的填充速度的指标,可以通过计算页面可见区域内容显示的平均时间来衡量
  5. Total Blocking Time (TBT)
    总阻塞时间,度量了 FCPTTI 之间的总时间,在该时间范围内,主线程被阻塞足够长的时间以防止输入响应。
    只要存在长任务,该主线程就会被视为“阻塞”,是因为浏览器无法中断正在进行的任务,如果用户确实在较长的任务中间与页面进行交互,则浏览器必须等待任务完成才能响应。
  6. Largest Contentful Paint (LCP)
    最大内容绘制,可视区域中最大的内容元素呈现到屏幕上的时间,用以估算页面的主要内容对用户可见时间LCP 考虑的元素包括 <img> 元素、<image> 元素内的 <svg> 元素、<video> 元素、通过 url() 函数加载背景图片的元素、包含文本节点或其他内联文本元素子级的块级元素)
  7. Cumulative Layout Shift (CLS)
    累积布局偏移,CLS 会测量在页面整个生命周期中发生的每个意外的布局移位的所有单独布局移位分数的总和,它是一种保证页面的视觉稳定性从而提升用户体验的指标方案(布局偏移发生在可见元素从一个渲染帧到下一个渲染帧改变其位置的任何时候,CLS 得分是给开发者的一个信号,表明他们的用户没有经历不必要的内容移动,分数越低越好)

Accessibility(可访问性)

Accessibility 辅助功能:无障碍设计,也称为网站可达性。是指所创建的网站对所有用户都可用/可访问,不管用户的生理/身体能力如何、不管用户是以何种方式访问网站。

比如:某处文字背景色和蚊子颜色对比度不够,对于视障用户可能不好区分。

Best Practices(最佳实践)

实践性检测,如网页安全性,如是否开启 HTTPS、网页存在的漏洞等,下图是通过审计的项目

在这里插入图片描述

SEO(搜索优化)

比如网页 title 是否符合搜索引擎的优化标准等

Performance 面板

认识配置面板

在这里插入图片描述

  • 区域 1 可以设置 Network 来限制网络加载速度,CPU 来限制 CPU 的运算速度(例如:将网络设置为 Fast 3G,CPU 运算能力降低到 1/6 )
  • 区域 2 中两个按钮可以用来监控加载阶段和交互阶段的性能数据,不过是分别通过录制来完成的(不同于 lighthouse 只能监控加载阶段的性能数据)
    录制加载阶段性能数据时,Performance 会重新刷新页面,并等到页面完全渲染出来后,Performance 就会自动停止录制
    录制交互阶段性能数据,需要手动停止录制过程

认识报告页

两种方式最终生成的报告都是一样的,三个主要部分,分别是概览面板、性能指标面板、详情面板。如图所示:

在这里插入图片描述

概览面板

概览面板提供几个关键指标:**页面帧速(FPS,Frames Per Second)、CPU资源消耗、网络请求流量、V8 内存使用量(堆内存)**等,按照时间顺序做成图表的形式展现出来,这就是概览面板。根据概览面板,如何帮助我们定位可能存在的问题呢?

  • FPS 图中红色块表示附近渲染出一帧所需时间过长
  • 如果 CPU 图像占用面积太大,表示 CPU 使用了越高,有可能因为某个 JavaScript 占用太多的主线程时间
  • 如果 V8 内存使用量一直在增加,有可能是某种原因导致了内存泄漏

性能面板

我们通过概览面板来定位问题的时间节点,然后再使用性能面板分析该时间节点内的性能数据,具体来说,比如概率面板中的 FPS 图中出现了红色块,点击该红色块,可以定位到该红色块的时间节点内,如图所示:

在这里插入图片描述
你也可以通过键盘 "WASD" 四个键来进行缩放和位置移动。这里 Main 指标,详细记录了渲染主线程上的任务执行记录,通过分析 Main 指标,能够定位到页面中所存在的性能问题。下面详细介绍如何分析 Main 指标。Main 指标放大可以看到很多一段一段灰色横条,每个灰色横条对应了一个任务,长条长度对应了任务的执行时长,如下图所示:

在这里插入图片描述

通常,渲染主线程上的任务都是比较复杂的,Main 指标不仅记录了一个任务的时长,同时记录了任务执行过程中的一些关键细节,这些细节就是任务的过程,灰色下面的横条就是一个个过程,同样这些横条的长度就代表这些过程执行的时长。下面我们结合一个简单的页面来分析页面加载过程:

<style>.area{border: 2px ridge;}.box{background-color: rgba(106, 24, 238, 0.26);height: 5em;margin: 1em;width: 5em;}
</style><div class="area"><div class="box rAF"></div>
</div>
<br>
function setNewArea() {let el = document.createElement('div')el.setAttribute('class', 'area')el.innerHTML = '<div class="box rAF"></div>'document.body.append(el)
}
setNewArea()

解析 HTML 数据阶段,它的主要任务就是通过解析 HTML 数据、解析 CSS 数据、执行 JavaScript 来生成 DOM 和 CSSOM,结合下图分析:

在这里插入图片描述

ParseHTML 过程中,如果解析到了 script 标签,便进入脚本执行过程,也就是图中的 Evaluate Script。我们知道,执行一段脚本首先需要编译该脚本,也就是图中对应的 Compile Script。编译好后,进入程序执行阶段,在执行全局代码时,V8 会构造一个 ananymouse 过程,在执行 ananymouse 过程中,会调用 setNewArea,在调用 setNewArea 过程中又调用了 createElement,由于之后调用了 document.append 方法,触发了 DOM 内容的修改,所以又强制执行了 Parse HTML。DOM 生成完成后,会触发相关的 DOM 事件,比如典型的 DOMContentLoadedreadyStateChange 事件。

相关文章:

Chrome 开发者工具

Chrome 开发者工具 介绍控制面板时间线下载信息概要请求列表单个请求时间线优化时间线上耗时项 lighthouse 插件Performance&#xff08;性能指标&#xff09;Accessibility&#xff08;可访问性&#xff09;Best Practices&#xff08;最佳实践&#xff09;SEO&#xff08;搜索…...

Error: error:0308010C:digital envelope routines::unsupported的解决方案

因为最近安装了pnpm对node版本有要求&#xff0c;升级了node版本是18以后&#xff0c;在运行之前的项目&#xff0c;就跑不起来了&#xff0c;报错如下&#xff1a; Error: error:0308010C:digital envelope routines::unsupported解决方案一&#xff1a; node版本切换到16版…...

vue基于spring boot框架的发艺美发店理发店管理系统的设计q9xpe

店铺信息、美发信息是发艺美发店管理系统的重要组成部分&#xff0c;信息清晰、详细、准确&#xff0c;能够有效地促进发艺美发店管理系统的运行[5]。基础设定函数是对整个系统的总体布局进行合理安排&#xff0c;包括&#xff1a;店铺活动、物品信息、领用信息等。通过对各类资…...

JS取余运算符 %,ES2023 新增数组方法Array.at

取余运算符&#xff08;%&#xff09;的作用就是用来两个操作数进行相除运算之后的余数。 注意&#xff0c;两个操作数取余是有循环范围的&#xff0c;这个范围为 0 - 第二个参数 - 1。 如下图&#xff1a; 对于6取余的话&#xff0c;得到的取余数据就会一直在0-5之间进行循环…...

unity SqLite读取行和列

项目文件 链接&#xff1a;https://pan.baidu.com/s/1BabHvQ-y0kX_w15r7UvIGQ 提取码&#xff1a;emsg –来自百度网盘超级会员V6的分享 using System.Collections; using System.Collections.Generic; using UnityEngine; using Mono.Data.Sqlite; using System; using Syste…...

使用docker部署RStudio容器并结合内网穿透实现公网访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…...

adb wifi 远程调试 安卓手机 命令

使用adb wifi 模式调试需要满足以下前提条件&#xff1a; 手机 和 PC 需要在同一局域网下。手机需要开启开发者模式&#xff0c;然后打开 USB 调试模式。 具体操作步骤如下&#xff1a; 将安卓手机通过 USB 线连接到 PC。&#xff08;连接的时候&#xff0c;会弹出请求&#x…...

Android Activity的启动流程(Android-10)

前言 在Android开发中&#xff0c;我们经常会用到startActivity(Intent)方法&#xff0c;但是你知道startActivity(Intent)后Activity的启动流程吗&#xff1f;今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程&#xff0c;同时由于Launcher的启动后续…...

flask不使用flask-login插件

由于flask版本升级问题&#xff0c;flask-manager里面的Command命令高版本不支持&#xff0c;低版本的兼容flask-sqlalchemy启动也会报错&#xff0c;第三方插件有很多问题&#xff0c;所以痛定思痛决定放弃使用这个&#xff0c;使用flask自带语法自己写一个 类似于django继承…...

1. SpringBoot3 基础

文章目录 1. SpringBoot 概述2. SpringBoot 入门3. SpringBoot 配置文件3.1 SpringBoot 配置文件基本使用3.2 yml 配置文件 4. SpringBoot 整合 Mybatis5. Bean 管理5.1 Bean 扫描5.2 Bean 注册5.3 注册条件 6. 组合注解7. 自动配置原理8. 自定义 Starter 1. SpringBoot 概述 …...

美易官方:苹果承认GPU安全漏洞存在:iPhone 12和M2系列受影响

苹果承认GPU安全漏洞存在&#xff1a; iPhone 12和M2 MacBook Air受影响 近日&#xff0c;苹果公司承认其部分产品存在GPU安全漏洞&#xff0c;这些漏洞可能会影响iPhone 12和M2 MacBook Air等设备的安全性。这一消息引起了广泛的关注和担忧&#xff0c;因为这些设备是许多用户…...

【Vue3】3-1 : 章节介绍 - Vue3组件应用及单文件组件

本书目录&#xff1a;点击进入 一、本章学习目标 二、课程安排 一、本章学习目标 Vue3组件相关概念掌握组件之间的通信封装一个可复用的组件单文件组件SFC&#xff1a;即.vue文件 样式 结构 逻辑脚手架的使用和底层实现机制工程化的认知 二、课程安排 组件的概念及组件的基…...

【数据结构】二叉树(遍历,递归)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​ 目录 二叉树遍历规则 前序遍历 ​…...

《微信小程序开发从入门到实战》学习八十五

6.15 设备API 6.15.2 添加联系人API 使用wx.addPhoneContact接口可以在用户的手机通讯录中添加联系人信息。用户可以选择“新增联系人”或“添加到已有联系人”。该接口接受Object参数&#xff0c;参支持属性如下所示&#xff1a; firstName&#xff1a;必填&#xff0c;名字…...

设计模式——命令模式

命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;使发出请求的对象和执行请求的对象解耦。这样可以方便地对请求排队、记录日志、撤销/重做操作以及支持可扩展性。 原理 命令接口&#xff08;Comman…...

Modbus协议学习第三篇之协议通信规则

导语 本篇博客将深入介绍Modbus协议的一些内容&#xff0c;主要包括通讯方式和通讯模型的介绍 Modbus通讯方式 Modbus协议是单主机、多从机的通信协议&#xff0c;即同一时间&#xff0c;总线上只能有一个主设备&#xff0c;但可以有一个或者多个从设备&#xff08;最多好像是2…...

git仓库使用说明

Git软件使用 1.先下载git相关软件 下载地址&#xff1a; Git - Downloading Package (git-scm.com) 下载其中一个安装 2.打开gitee网站&#xff0c;注册账号 3.打开个人中心&#xff0c;选择ssh公钥&#xff0c;查看如何生成公钥 4.生成公钥后&#xff0c;添加相应的公钥 …...

边缘计算和联邦学习的联系

1. 什么是边缘计算&#xff1f; 边缘计算&#xff08;Edge Computing&#xff09;是一种计算模型&#xff0c;其主要思想是将计算、存储和数据处理能力推送到离数据源近的边缘设备&#xff0c;而不是依赖于远程的云服务器。这样做的目的是减少数据传输延迟、提高响应速度&…...

机器学习算法理论:贝叶斯

贝叶斯定理对于机器学习来说是经典的概率模型之一&#xff0c;它基于先验信息和数据观测来得到目标变量的后验分布。具体来说&#xff0c;条件概率&#xff08;也称为后验概率&#xff09;描述的是事件A在另一个事件B已经发生的条件下的发生概率&#xff0c;公式表示为P(A|B)&a…...

229.【2023年华为OD机试真题(C卷)】手机App防沉迷系统(模拟-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-手机App防沉迷系统二.解题思路三.题解代码Pyth…...

关系运算符

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 补充: 如果要想对所选择的数据行进行控制&#xff0c;那么可以利用 WHERE 子句完成&#xff0c;此时的 SQL 语法结构变为如下形式 先系统性介绍下: ● 关系运算&#xff1a; >、、&…...

K8s-架构

一、K8s节点划分 K8s集群包含Master(控制节点)和Node(工作节点)&#xff0c;应用部署在Node节点上。 集群架构图&#xff1a; 二、Master节点 Master节点分成四个组件&#xff1a;scheduler、ApiServer、Controller Manager、ETCD。类似三层结构&#xff0c;controller&#…...

C++ 并发编程 | 进程与线程

一、进程与线程 1、进程 1.1、定义 操作系统中最核心的概念就是进程&#xff0c;进程是对正在运行中的程序的一个抽象&#xff0c;是系统进行资源分配和调度的基本单位。进程是一种抽象的概念&#xff0c;一般由程序、数据集合和进程控制块三部分组成&#xff0c;如下&#x…...

基于Python实现身份证信息识别

目录 前言身份证信息识别的背景与意义自动识别身份证的需求实现环境与工具准备Python编程语言OpenCV图像处理库Tesseract OCR引擎身份证信息识别算法原理图像预处理步骤(图像裁剪、灰度化 、二值化、去噪)信息提取与解析Python代码实现通过OCR提取身份证号码代码解析身份证信息…...

深度学习记录--正则化(regularization)

什么是正则化&#xff1f; 正则化(regularization)是一种实用的减少方差(variance)的方法&#xff0c;也即避免过度拟合 几种正则化的方法 L2正则化 又被称为权重衰减(weight dacay) 在成本函数中加上正则项&#xff1a; 其中 由于在w的更新过程中会递减&#xff0c;即权…...

Java的便捷输入方法及解析

在 Java 中&#xff0c;有多种便捷的输入方法可以从用户那里获取输入。下面是一些常见的便捷输入方法及解析&#xff1a; 使用 Scanner 类&#xff1a;在上述示例中&#xff0c;首先导入了 java.util.Scanner 类&#xff0c;创建了一个 Scanner 对象&#xff0c;并使用 System…...

抖音矩阵云混剪系统源码(免授权版)多平台多账号一站式管理,附带系统搭建教程

搭建教程 MySQL 5.6 PHP 7.2 Apache 数据库名称 juzhen Nginx环境切换伪静态 1、解压安装包到项目根目录&#xff0c;找到application/database.php 更换自己的数据库密码 2、阿里云现有的配置不要动 其他按照文档进行添加 3、项目访问目录&#xff1a;public 4、域名…...

【Linux】权限的深度解析

前言&#xff1a;在此之前我们学习了一些常用的Linux指令&#xff0c;今天我们进一步学习Linux下权限的一些概念 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的学习 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记&a…...

c++函数怎么返回多个值

文章目录 使用结构体或类&#xff1a;定义一个结构体或类&#xff0c;其中包含了所有需要返回的值。然后在函数中返回这个结构体或类的实例。 struct Result {int value1;double value2;char value3; };Result myFunction() {Result r;r.value1 1;r.value2 2.0;r.value3 a;r…...

《剑指 Offer》专项突破版 - 面试题 15 : 字符串中的所有变位词(C++ 实现)

题目链接&#xff1a;LCR 015. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 输入字符串 s1 和 s2&#xff0c;如何找出字符串 s2 的所有变位词在字符串 s1 中的起始下标&#xff1f;假设两个字符串中只包含英文小写字母。例如&…...