Web 性能

Web 性能是客观的衡量标准,是用户对加载时间和运行时的直观体验。Web 性能指页面加载到可交互和可响应所消耗的时间,以及页面在交互时的流畅度——滚动是否顺滑?按钮能否点击?弹窗能否快速打开,动画是否平滑?Web 性能既包括客观的度量如加载时间,每秒帧数和到页面可交互的时间;也包括用户的对页面内容加载时间的主观感觉。

页面响应时间越长,越多的用户就会放弃该网站。重要的是,通过使体验尽可能早地变得可用和交互,同时异步地加载长尾体验部分,来最大程度地减少加载和响应时间,并添加其他功能以降低延迟。

有很多工具,API 和最佳实践帮助我们测量和改进网页性能。本章对此有所讲解。

关键性能指南

CSS 动画与 JavaScript 动画的性能

对众多应用程序而言,动画对提供友好的用户体验有着关键的作用。我们有很多方式生成 web 动画,比如 CSS transitionanimation 或者基于 JavaScript 的动画(使用 Window.requestAnimationFrame)。在这篇文章中,我们分析 CSS 动画和 JavaScript 动画的性能差异。

dns-prefetch

DNS-prefetch (DNS 预获取) 是尝试在请求资源之前解析域名。这可能是后面要加载的文件,也可能是用户尝试打开的链接目标。

Lazy loading

延迟加载 (懒加载) 是一种将资源标识为非阻塞(非关键)资源并仅在需要时加载它们的策略。这是一种缩短关键渲染路径长度的方法,可以缩短页面加载时间。

Performance Monitoring: RUM vs synthetic monitoring

综合监控真实用户监控 (RUM) 是两种监视和提供 Web 性能见解的方法。RUM and synthetic monitoring provide for different views of performance and have benefits, good use cases and shortfalls. RUM is generally best suited for understanding long-term trends whereas synthetic monitoring is very well suited to regression testing and mitigating shorter-term performance issues during development. In this article we define and compare these two performance monitoring approaches.

优化启动性能

一个在软件应用开发中经常被忽视的方面—即便在那些专注于性能优化的软件中—就是启动时的表现。你的应用需要花费多长时间启动?当应用加载时是否会卡住用户的设备或浏览器?这会让用户担心你的应用崩溃了,或者哪儿出错了。花时间确保你的应用能够更好地启动总是一个好主意。这篇文章提供了一些技巧和建议来帮助你达成这个目标,不管是在写一个新的应用还是从其他平台向 Web 移植一个应用。

关键渲染路径

关键渲染路径是浏览器将 HTML,CSS 和 JavaScript 转换为屏幕上的像素所经历的步骤序列。优化关键渲染路径可提高渲染性能。关键渲染路径包含了 文档对象模型(DOM),CSS 对象模型 (CSSOM),渲染树和布局。

渲染页面:浏览器的工作原理

页面内容快速加载和流畅的交互是用户希望得到的 Web 体验,因此,开发者应力争实现这两个目标。

初学者教程

MDN Web 性能学习专区有着涵盖性能要素的最新教程。如果你是性能新手,请从这里开始:

Web 性能:概述 (en-US)

Web 性能学习路径概述。在这里开始你的旅程。

什么是 Web 性能? (en-US)

该文从一个模块开始,很好地讲述了性能到底是什么——包括我们在考虑性能时需要考虑的工具、指标、API、网络和人群,以及如何使性能成为 Web 开发工作流程的一部分。

用户如何看待性能?

比网站在毫秒内响应速度更重要的是,用户对网站的感知速度有多快。这些感知受到页面实际加载时间、空闲、用户交互响应以及滚动和其他动画的平滑度的影响。在本文中,我们将随着最佳练习来提升用户感知(而不是实际时间)并讨论各种加载指标、动画和响应性指标。

Web 性能基础

除了 HTML,CSS,JavaScript 和媒体文件这些前端模块之外,还有其他影响 Web 性能的因素,它们可能会导致应用程序变慢,或在主观和客观上使应用程序变快。有许多与 Web 性能相关的 API、开发人员工具、最佳实践和不当做法。我们将在基础层面上介绍这些影响因素,并提供进阶优化其中每一项性能的链接。

HTML 性能特性 (en-US)

标签的某些属性和顺序可能会影响网站性能。通过最大程度地减少 DOM 节点的数量,确保使用最佳顺序和属性,包括样式、脚本、媒体和第三方脚本等内容,可以大大改善用户体验。该文详细介绍了如何使用 HTML 来确保最佳性能。

多媒体:图像与视频 (en-US)

Web 性能的最小代价通常是媒体优化。基于每个用户代理的能力、大小和像素密度来服务不同的媒体文件已成为可能。另外,如从背景图像中删除音频轨迹,可进一步提升性能。该文讨论视频、音频和图像内容对性能的影响,以及确保影响尽可能小的方法。

CSS 性能特性

CSS 对于提高性能来说可能是一个不太重要的优化点,但是某些 CSS 特性对性能的影响比其他特性更大。在该文中,我们将研究一些影响性能的 CSS 属性,并提供样式处理的建议方法,以确保性能不受负面影响。

JavaScript 性能最佳实践 (en-US)

如果正确使用 JavaScript,则可以提供交互式和身临其境的 Web 体验——否则可能会严重损害下载时间、渲染时间、应用内性能、电池寿命和用户体验。该文概述了一些值得思考的 JavaScript 最佳实践,以确保即使复杂的内容也尽可能地具有高性能。

移动端性能

随着移动设备上的 Web 访问普及,并且所有移动平台都具有功能完善的 Web 浏览器,但由于受限于带宽、CPU、电池续航等因素,因此考虑这些平台上 Web 内容的性能非常重要。本文着眼于特定于移动设备的性能注意事项。

使用 Performance API

Performance API (en-US)

该指南介绍了如何使用 High-Resolution Time 标准中定义的 Performance 接口。

Resource Timing API

资源加载和定时加载这些资源,包括管理资源缓冲区和处理 CORS

性能时间线 (en-US)

Performance Timeline 标准定义了对 Performance 接口的扩展,以支持应用程序中的客户端延迟测量。这些接口一起可以用来帮助识别应用程序的性能瓶颈。

User Timing API (en-US)

使用创建特定于应用程序的时间戳 user timing API 的“标记”和“度量”条目类型——它们是浏览器性能时间轴的一部分。

Beacon API (en-US)

使用 Beacon 接口调度发送给服务器的异步非阻塞请求。

Intersection Observer API

通过 Intersection Observer API 学习对元素可见性的监测,并在关注的元素变得可见时被异步通知。

其他文档

开发者工具中与性能相关的功能

本节提供有关如何使用和理解开发人员工具中的性能特性的信息,包括 WaterfallCall TreeFlame Charts (en-US)

使用内置分析器进行分析

了解如何使用 Firefox 的内置分析器来分析应用程序性能。

各种术语

参见