《现代Javascript高级教程》提升网页性能的利器

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Performance API: 提升网页性能的利器引言在现代 Web 开发中,性能优化是一个关键的方面。用户期望快速加载的网页,而慢速的加载和响应时间可能导致用户流失和不良的用户体验。为了满足用户的需求,我们需要准确地测量和分析网页的性能,并采取相应的优化措施。

Performance API: 提升网页性能的利器

引言

在现代 Web 开发中,性能优化是一个关键的方面。用户期望快速加载的网页,而慢速的加载和响应时间可能导致用户流失和不良的用户体验。为了满足用户的需求,我们需要准确地测量和分析网页的性能,并采取相应的优化措施。

Performance API 是浏览器提供的一组接口,可以让开发者测量和监控网页的性能表现。它提供了丰富的属性和方法,可以帮助我们了解网页加载的时间、资源的使用情况、代码执行的性能等关键指标。本文将详细介绍 Performance API 的属性和 API,探讨其应用场景,并提供相关的代码示例和引用资料链接。

1. Performance API 简介

Performance API 是 Web API 的一部分,旨在提供与浏览器性能相关的信息和指标。它通过提供一组属性和方法,使开发者能够测量和分析网页的性能,以便进行性能优化。

Performance API 的核心对象是 performance,它代表了网页的性能信息。通过 performance 对象,我们可以访问各种性能指标、测量和记录时间戳、计算代码执行时间等。

以下是一些常用的 Performance API 属性:

  • navigation:提供了与导航相关的性能指标,如页面加载时间、重定向次数、响应时间等。
  • timing:提供了与页面加载和资源加载相关的性能指标,如 DNS 查询时间、TCP 连接时间、DOM 解析时间等。
  • memory:提供了与内存使用情况相关的性能指标,如内存限制、已使用内存、垃圾回收次数等。
  • navigationTiming:提供了更详细的页面加载时间指标,如重定向时间、解析 DOM 树时间、首次渲染时间等。

Performance API 还提供了一些方法,用于测量和记录时间戳、添加标记、计算代码执行时间等。

2. Performance API 属性和 API

2.1 navigation

performance.navigation 属性提供了与导航相关的性能指标,可以帮助我们了解页面的加载时间、重定向次数、响应时间等。

以下是一些常用的 navigation 属性:

  • performance.navigation.type:表示导航类型,如新页面加载、页面刷新、页面后退等。
  • performance.navigation.redirectCount:表示页面重定向的次数。

这些 navigation 属性可以用于分析页面的导航行为和性能表现。

示例代码:

console.log(`导航类型: ${performance.navigation.type}`);
console.log(`重定向次数: ${performance.navigation.redirectCount}`);

2.2 timing

performance.timing 属性提供了与页面加载和资源加载相关的性能指标,可以帮助我们了解页面加载的各个阶段所花费的时间。

以下是一些常用的 timing 属性:

  • performance.timing.navigationStart:表示页面开始导航的时间。
  • performance.timing.fetchStart:表示开始获取页面资源的时间。
  • performance.timing.domContentLoadedEventStart:表示 DOMContentLoaded 事件开始的时间。
  • performance.timing.loadEventStart:表示 load 事件开始的时间。

这些 timing 属性可以用于分析页面的加载性能,找出加载过程中的瓶颈。

示例代码:

console.log(`导航开始时间: ${performance.timing.navigationStart}`);
console.log(`资源获取开始时间: ${performance.timing.fetchStart}`);
console.log(`DOMContentLoaded 事件开始时间: ${performance.timing.domContentLoadedEventStart}`);
console.log(`load 事件开始时间: ${performance.timing.loadEventStart}`);

2.3 memory

performance.memory 属性提供了与内存使用情况相关的性能指标,可以帮助我们了解页面的内存限制、已使用内存、垃圾回收次数等信息。

以下是一些常用的 memory 属性:

  • performance.memory.jsHeapSizeLimit:表示 JavaScript 堆的大小限制。
  • performance.memory.usedJSHeapSize:表示已使用的 JavaScript 堆大小。
  • performance.memory.totalJSHeapSize:表示 JavaScript 堆的总大小。

这些 memory 属性可以用于监控页面的内存使用情况,及时发现内存泄漏或过度使用内存的问题。

示例代码:

console.log(`JavaScript 堆大小限制: ${performance.memory.jsHeapSizeLimit}`);
console.log(`已使用的 JavaScript 堆大小: ${performance.memory.usedJSHeapSize}`);
console.log(`JavaScript 堆的总大小: ${performance.memory.totalJSHeapSize}`);

2.4 navigationTiming

performance.getEntriesByType('navigation') 方法返回与页面加载时间相关的详细信息,提供了更详细的页面加载时间指标,如重定向时间、解析 DOM 树时间、首次渲染时间等。

以下是一些常用的 navigationTiming 属性:

  • navigationTiming.redirectTime:表示重定向时间。
  • navigationTiming.domInteractiveTime:表示 DOM 解析完成的时间。
  • navigationTiming.domContentLoadedTime:表示 DOMContentLoaded 事件触发的时间。
  • navigationTiming.loadEventTime:表示 load 事件触发的时间。

这些 navigationTiming 属性可以用于更细粒度地分析页面加载的各个阶段所花费的时间。

示例代码:

const entries = performance.getEntriesByType('navigation');
const navigationTiming = entries[0];
console.log(`重定向时间: ${navigationTiming.redirectTime}`);
console.log(`DOM 解析完成时间: ${navigationTiming.domInteractiveTime}`);
console.log(`DOMContentLoaded 事件触发时间: ${navigationTiming.domContentLoadedTime}`);
console.log(`load 事件触发时间: ${navigationTiming.loadEventTime}`);

2.5 其他方法

Performance API

还提供了一些其他方法,用于测量和记录时间戳、添加标记、计算代码执行时间等。

以下是一些常用的方法:

  • performance.now():返回当前时间戳,可用于测量代码执行时间。
  • performance.mark():添加一个时间戳标记,用于记录关键时刻。
  • performance.measure():计算两个时间戳标记之间的时间间隔。
  • performance.getEntriesByName():获取指定名称的时间戳标记信息。

这些方法可以帮助我们精确测量代码的执行时间和关键事件的发生时间。

示例代码:

const startTime = performance.now();
// 执行一些耗时的操作
const endTime = performance.now();
const executionTime = endTime - startTime;
console.log(`代码执行时间: ${executionTime} 毫秒`);
performance.mark('start');
// 执行一些操作
performance.mark('end');
performance.measure('操作耗时', 'start', 'end');
const measurements = performance.getEntriesByName('操作耗时');
console.log(`操作耗时: ${measurements[0].duration} 毫秒`);

3. Performance API 应用场景

Performance API 在 Web 开发中有许多应用场景,下面是一些常见的应用场景:

3.1 性能优化

通过使用 Performance API,我们可以测量和分析网页的性能指标,如加载时间、资源使用情况、代码执行时间等。这些指标可以帮助我们了解网页的性能瓶颈,并采取相应的优化措施。例如,通过分析页面加载时间的各个阶段所花费的时间,我们可以找出加载过程中的瓶颈,并进行相应的性能优化。

示例代码:

const startTime = performance.timing.navigationStart;
const loadTime = performance.timing.loadEventStart - startTime;
console.log(`页面加载时间: ${loadTime} 毫秒`);

3.2 监控页面资源

Performance API 可以帮助我们监控页面的资源使用情况,包括网络请求、DOM 元素和脚本执行等。通过分析资源加载时间、资源大小等指标,我们可以找出资源使用不当或过度使用资源的问题,从而进行优化。

示例代码:

3.2 监控页面资源
Performance API 可以帮助我们监控页面的资源使用情况,包括网络请求、DOM 元素和脚本执行等。通过分析资源加载时间、资源大小等指标,我们可以找出资源使用不当或过度使用资源的问题,从而进行优化。
示例代码:
javascript复制代码
作者:linwu
链接:https://juejin.cn/post/7251786775336878138
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3.3 监控内存使用情况

使用 Performance API 的 memory 属性,我们可以监控页面的内存使用情况。通过了解页面的内存限制、已使用内存、垃圾回收次数等信息,我们可以及时发现内存泄漏或过度使用内存的问题,并进行优化。

示例代码:

console.log(`JavaScript 堆大小限制:
 ${performance.memory.jsHeapSizeLimit}`);
console.log(`已使用的 JavaScript 堆大小: ${performance.memory.usedJSHeapSize}`);
console.log(`JavaScript 堆的总大小: ${performance.memory.totalJSHeapSize}`);

3.4 分析代码执行时间

通过使用 Performance API 的 now() 方法,我们可以测量代码的执行时间。这对于优化关键代码块的性能非常有帮助,可以找出代码执行中的瓶颈,从而进行优化。

示例代码:

const startTime = performance.now();
// 执行一些耗时的操作
const endTime = performance.now();
const executionTime = endTime - startTime;
console.log(`代码执行时间: ${executionTime} 毫秒`);

结论

Performance API 是浏览器提供的一个强大工具,可用于测量和优化网页的性能。通过使用 Performance API 提供的属性和方法,我们可以准确地测量网页加载时间、资源使用情况和代码执行时间等关键指标。这些指标可以帮助我们了解网页的性能瓶颈,并采取相应的优化措施。

在实际应用中,我们可以根据性能优化的需求使用 Performance API,从而提升网页的加载速度、响应时间和用户体验。

参考资料

目录
相关文章
|
10天前
|
算法 JavaScript 前端开发
垃圾回收机制对 JavaScript 性能的影响有哪些?
【10月更文挑战第29天】垃圾回收机制对JavaScript性能有着重要的影响。开发者需要了解不同垃圾回收算法的特点和性能开销,通过合理的代码优化和内存管理策略,来降低垃圾回收对性能的负面影响,提高JavaScript程序的整体性能。
|
28天前
|
存储 JavaScript 前端开发
使用JavaScript构建动态交互式网页:从基础到实践
【10月更文挑战第12天】使用JavaScript构建动态交互式网页:从基础到实践
68 1
|
2月前
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
2月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
8天前
|
JavaScript 前端开发
利用事件循环提高 JavaScript 程序的性能
本文介绍了事件循环在JavaScript中的工作原理,以及如何通过合理利用事件循环来优化程序性能,包括异步操作、任务优先级和避免阻塞等技巧。
|
10天前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
18 2
|
1月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
14 1
【JavaScript】网页交互的灵魂舞者
|
1月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
31 4
|
28天前
|
存储 JavaScript 前端开发
JavaScript数组去重的八种方法详解及性能对比
在JavaScript开发中,数组去重是一个常见的操作。本文详细介绍了八种实现数组去重的方法,从基础的双重循环和 indexOf() 方法,到较为高级的 Set 和 Map 实现。同时,分析了每种方法的原理和适用场景,并指出了使用 Set 和 Map 是目前最优的解决方案。通过本文,读者可以深入理解每种方法的优缺点,并选择最合适的数组去重方式。
47 0
|
1月前
|
Web App开发 缓存 前端开发
前端RAG:使用Transformers.js手搓纯网页版RAG(二)- 基于qwen1.5-0.5B
本文继续探讨了RAG的后半部分,通过在浏览器中运行qwen1.5-0.5B模型实现了增强搜索全流程。然而,由于浏览器与模型性能限制,该方案更适合研究、离线及高隐私场景。文章提供了完整的前端代码,让读者能够动手尝试。此外,详细介绍了代码框架、知识库准备、模型初始化及问答实现等步骤,并展示了实际运行效果。受限于当前技术,除非在离线或高隐私环境下,网页大模型的应用仍需进一步优化。