学习performanceApi

本文介绍了浏览器性能的关键指标,如PerformanceAPI的使用,特别是Performance.timing和getEntries方法。详细解释了浏览器解析HTML、构建DOM树、CSSOM和Render树的过程,以及为何将CSS和JS放置在HTML头部和底部对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. performance

performance分performance浏览器工具和performanceaApi

1.1 performance.timing

  • timing :这个属性是记录不同事件发生时产生的时间戳,只读属性, 不再推荐使用该特性。虽然一些浏览器仍然支持它,推荐使用 PerformanceNavigationTiming
    在这里插入图片描述

1.2 Performance.getEntries

返回一个数组 ,var entries = window.performance.getEntries(PerformanceEntryFilterOptions);
PerformanceEntryFilterOptions 可选
PerformanceEntryFilterOptions 是一个带有以下键值的字典:

  • “name”, performance entry. 的名字
  • “entryType”, entry 类型。合法的 entry 类型可以从PerformanceEntry.entryType 方法获取。
  • “initiatorType”, 初始化资源的类型 (例如一个 HTML element). 其取值被 PerformanceResourceTiming.initiatorType 接口所定义。
  • entries = performance.getEntries({name: “entry_name”, entryType: “mark” ,initiatorType:“xmlhttprequest”});这三个key在不传参所返回的数组对象中有体现可以看的到

var entries = window.performance.getEntries()
在这里插入图片描述

1.3 和浏览器渲染关系

客户端(浏览器)解析HTML内容并渲染出来,浏览器接收到数据包后的解析流程为:

1.3.1构建DOM树:词法分析然后解析成DOM树(dom tree),是由dom元素及属性节点组成,树的根是document对象

1.3.2 构建CSS规则树:生成CSS规则树(CSS Rule Tree)

1.3.3 构建render树:Web浏览器将DOM和CSSOM结合,并构建出渲染树(render tree)

1.3.4 布局(Layout):计算出每个节点在屏幕中的位置

1.3.5 绘制(Painting):即遍历render树,并使用UI后端层绘制每个节点。

在这里插入图片描述
浏览器渲染详细过程: 浏览器已经拿到了 server 端返回的 HTML 内容,开始解析并渲染。最初拿到的内容就是一堆字符串,必须先结构化成计算机擅长处理的基本数据结构,这个内部结构就是 DOM,DOM 提供了对 HTML 文档的结构化表述。渲染进程通过分词器将html字节流成功成一个个 token,包括 Tag token 和文本 token。HTML 解析器维护了一个 token 栈结构,token 会按照对应顺序入栈出栈,然后将 token 解析成 DOM 节点,并将 DOM 节点添加进 DOM 树中。 解析过程中,如果遇到< link href ="…">和< script src ="…">这种外链加载 CSS 和 JS 的标签,浏览器会异步下载,下载过程和上文中下载 HTML 的流程一样。只不过,这里下载下来的字符串是 CSS 或者 JS 格式的。 渲染引擎在接受到 CSS 文本时,会将 CSS 生成 CSS对象模型CSSOM(即CSS Object Model) ,通过document.styleSheets可获取所有CSS样式表,然后将 styleSheet 中的属性值进行标准化操作。最后将 DOM 和 CSSOM 整合成 RenderTree ,然后针对 RenderTree 进行渲染。 最后,渲染过程中,如果遇到< script >就停止渲染,执行 JS 代码。因为浏览器渲染和 JS 执行共用一个线程,而且这里必须是单线程操作,多线程会产生渲染 DOM 冲突。待< script >内容执行完之后,浏览器继续渲染。

为何要将 CSS 放在 HTML 头部?
这样会让浏览器尽早拿到 CSS 尽早生成 CSSOM ,然后在解析 HTML 之后可一次性生成最终的RenderTree ,渲染一次即可。如果 CSS 放在 HTML 底部,会出现渲染卡顿的情况,影响性能和体验。

为何要将 JS 放在 HTML 底部?
JS 放在底部可以保证让浏览器优先渲染完现有的 HTML 内容,让用户先看到内容,体验好。另外, JS 执行如果涉及 DOM 操作,得等待 DOM 解析完成才行, JS 放在底部执行时, HTML 肯定都解析成了 DOM 结构。 JS 如果放在 HTML 顶部, JS 执行的时候 HTML 还没来得及转换为 DOM 结构,可能会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值