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

简介: 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,从而提升网页的加载速度、响应时间和用户体验。

参考资料

目录
相关文章
|
1月前
|
数据采集 Web App开发 JavaScript
JavaScript爬虫进阶攻略:从网页采集到数据可视化
JavaScript爬虫进阶攻略:从网页采集到数据可视化
|
1月前
|
移动开发 前端开发 JavaScript
编程笔记 html5&css&js 005 网页上都有哪内容、形式和操作
编程笔记 html5&css&js 005 网页上都有哪内容、形式和操作
|
2月前
|
JavaScript 前端开发 网络协议
​Node.js 教程(一) 基本概念与基本使用
​Node.js 教程(一) 基本概念与基本使用
|
3月前
|
前端开发 JavaScript 开发者
深入理解JavaScript:从基础到高级应用
深入理解JavaScript:从基础到高级应用
43 0
|
1月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
26 0
JavaScript字符串检查:从基础到高级
|
3天前
|
缓存 JavaScript 前端开发
Vue.js 路由时用于提高应用程序性能
Vue.js 路由时用于提高应用程序性能
|
8天前
|
算法
Swiper库和Glide.js库的性能有何区别
Swiper和Glide.js是两个流行的响应式轮播图库。Swiper功能强大且灵活,支持多方向滑动,拥有丰富的配置和切换效果,适合复杂需求,其高性能得益于优化的算法和惰性加载。Glide.js则轻量级、快速,专注于基础功能,适合简洁需求。两者各有侧重,选择应基于项目具体需求和性能考虑。
|
30天前
|
JavaScript 前端开发 Java
JavaScript高级笔记-coderwhy版本(六)
JavaScript高级笔记-coderwhy版本
74 0
|
30天前
|
JavaScript 前端开发 Java
JavaScript高级笔记-coderwhy版本(一)
JavaScript高级笔记-coderwhy版本
34 0
JavaScript高级笔记-coderwhy版本(一)
|
1月前
|
数据采集 JSON JavaScript
如何处理动态网页(例如使用 JavaScript 生成的内容)?
如何处理动态网页(例如使用 JavaScript 生成的内容)?
16 0