除了避免不必要的资源下载,在提高网页加载速度上您可以采取的最有效措施就是,通过优化和压缩其余资源来最大限度减小总下载大小。
在您消除了任何不必要的资源之后,下一步就是对浏览器需要下载的其余资源进行压缩。根据资源类型(文本、图像、字体等),有若干不同的技术可供您驱使:可在服务器上启用的通用工具、适用于特定内容类型的预处理优化以及需要开发者输入的资源特定优化。
实现最佳性能需要组合使用上述所有技术。
TL;DR
减小数据大小的过程称为数据压缩。许多人终其一生致力于算法、技术和优化研究,以期提高各种压缩程序的压缩比率、速度和内存要求。对数据压缩进行详细讨论超出了本主题的范围。但是,概要了解压缩的工作原理以及在减小网页所需各类资产大小方面可供我们利用的技术,仍具有重要意义。
为说明这些技术的核心原理,我们看看如何优化一种简单的短信格式(不过是我们专为此示例编造的格式):
# Below is a secret message, which consists of a set of headers in
# key-value format followed by a newline and the encrypted message.
format: secret-cipher
date:08/25/16
AAAZZBBBBEEEMMM EEETTTAAA
您有什么办法可以减小上面这条 200 个字符长短信的大小呢?
format: secret-cipher
date: 08/25/16
3A2Z4B3E3M 3E3T3A
新短信的长度为 56 个字符,这意味着您已将原有短信压缩了 72%,令人吃惊。
好是好,但这对优化网页有什么帮助吗?我们不会尝试发明自己的压缩算法,但正如您将会看到的那样,我们在优化网页上的各种资源时,将会采用完全相同的技术和思维方式:预处理、环境特定优化以及为不同的内容采用不同的算法。
TL;DR
…
试一下
以上面这个简单 HTML 网页及其包含的三个不同内容类型为例:HTML 标记、CSS 样式和 JavaScript。其中的每一个内容类型针对构成有效内容的元素都具有不同的规则,在注释指示等方面也具有不同的规则。我们如何才能减小这个网页的大小呢?
…
试一下
执行以上步骤后,可将网页字符数从 406 缩减到 150,缩减率高达 63%。不得不承认,其可读性不太好,但其实也不必具有多好的可读性:您可以保留原始网页作为“开发版本”,然后在您准备好在网站上发布网页时再执行以上步骤。
退一步讲,上例说明了一个要点:通用压缩程序(例如设计用于压缩任意文本的压缩程序)在压缩以上网页时可能同样可以取得相当不错的效果,但永远别指望它能去除注释、折叠 CSS 规则或者进行大量的其他内容特定优化。正因如此,预处理/源码压缩/环境感知优化才会成为功能如此强大的工具。
同理,可以将以上技术运用到基于文本的资产以外的其他领域。图像、视频以及其他内容类型都包含其自己的元数据形式和各种负载。例如,每当您使用相机拍摄照片时,照片通常也会嵌入大量额外的信息:相机设置、位置等等。视具体应用而定,这些数据可能很关键(例如照片分享网站),也可能毫无用处,因此您应该考虑将其删除是否值得。事实上,每一幅图像的这些元数据加起来可能多达数万字节。
简言之,作为优化资产效率的第一步,您需要建立一个不同内容类型的清单,并考虑可以进行哪些类型的内容特定优化来减小其大小。然后,在您确定具体的优化后,通过将其加入内部版本和发行版本流程来自动执行这些优化,以便确保优化一直有效。
TL;DR
所有现代浏览器都支持并自动协商将 GZIP 压缩用于所有 HTTP 请求。您必须确保服务器得到正确配置,能够在客户端请求时提供压缩过的资源。
上表显示了 GZIP 压缩对几种最流行的 JavaScript 内容库和 CSS 框架可实现的压缩率。压缩率范围为 60% 至 88%,将文件压缩源码后(产生文件名中包含“.min”的文件),再使用 GZIP 进行压缩,可进一步提高压缩率。
1. 先应用内容特定优化:CSS、JS 和 HTML 压缩源码程序。
2. 采用 GZIP 对压缩源码后的输出进行压缩。
启用 GZIP 是实现起来最简单并且回报最高的优化之一,遗憾的是,仍有许多人不去实现它。大多数网络服务器都会代您完成压缩内容的工作,您只需要确认服务器进行了正确配置,能够对所有可受益于 GZIP 压缩的内容进行压缩。
HTML5 Boilerplate 项目包含所有最流行服务器的配置文件样例,其中为每个配置标志和设置都提供了详细的注解。要为您的服务器确定最佳配置,请执行以下操作: 在列表中找到您喜爱的服务器。 查找 GZIP 部分。 * 确认您的服务器配置了推荐的设置。
可通过以下这种快速而又简单的方法了解 GZIP 的实用效果:打开 Chrome DevTools,然后检查“Network”面板中的“Size / Content”列:“Size”表示资产的传送大小,“Content”表示资产的未压缩大小。对于上例中的 HTML 资产,GZIP 在传送时节省了 98.8KB。
最后,尽管大多数服务器会在向用户提供这些资产时自动对其进行压缩,但某些 CDN 需要特别注意和手动操作,以确保 GZIP 资产得到提供。务请审核您的网站并确保资产确实得到压缩。
本文转自:
优化基于文本的资产的编码和传送大小
参考工具:
Lighthouse