现代互联网时代,打开一个Web平台,是留下还是离开,只需要 1 分钟,因此前端的性能优化至关重要。
由于前端优化不佳,大多数网站无法提供令人满意的用户体验,最常见的情况是数据加载和图像优化不佳,本文分享几个优化策略。
资源最小化
资源(静态资源)压缩是指从 HTML、CSS 和 JavaScript 中删除不需要加载的不必要的冗余数据的过程。这包括删除代码注释和格式、空白字符、未使用的代码、换行符等。
缩小 HTML、CSS 和 JavaScript 将加快前端加载时间,因为它减少了需要从服务器请求的代码量。
生成 HTML、CSS 和 JavaScript 代码的优化版本可以借助工具,如下:
- HTML: PageSpeed Insights 、HTML Minifier。
- CSS: cssmin.js、Chrome Dev Tools 中的 Coverage 工具、YUI Compressor。
- JavaScript: JSMin、Chrome Dev Tools 中的 Coverage 工具。
压缩文件
对于WEB项目,文件越大,加载所需的时间就越长,现代WEB平台通常有大量的 HTML、CSS 和 JavaScript 包。
通过使用合适的方法压缩文件,可以轻松地对前端的加载时间产生重大影响。以下是可以遵循的两个不错的文件压缩选项:
Gzip :最流行的数据压缩和解压缩方法,所有现代浏览器都支持,Gzip 在将站点的 HTML、CSS 和 JavaScript 包发送到浏览器之前先在服务器端对其进行压缩,然后在客户端解压缩文件并传送内容。Brotli :与当前可用的压缩方法相比,它提供了最佳的压缩率,根据 CertSimple 的研究,Brotli
压缩 JavaScript 文件比 Gzip
小14%
,而 HTML 和 CSS 压缩率比 Gzip
好 21%
和 17%
。
图片优化
说到网站,图像是重要的组成部分,互联网上93.7%
的网站至少使用一种图像文件格式,因为它们有助于提高用户参与度,更加吸引用户眼球。
但是,使用图像的负面影响是会对前端加载时间产生不利影响。但是,现在有多种方式可以优化图像:
使用 webp 或 avif
使用 webp
和 avif
等新图像格式比 jpg
和 png
等旧格式具有更好的性能。
webp
比png
小26%
,比jpg
小25-35%
。avif
比jpg
小50%
,比webp
小20%
。
但是,缺点是浏览器支持还不够普遍。webp
最近获得了浏览器支持的普遍支持,可能存在旧版本不支持它。另一方面,avif
仅在 Chrome 和 Opera 中得到了支持。
提供正确尺寸的图像
减少图像加载时间和提高网站性能的另一种方法是使用响应式图像。超过50%
的流量来自智能手机和平板电脑,将图像缩放到主流设备尺寸并使用。
除了选择合适的格式和尺寸外,还有其他几种方法,通过图像优化来减少前端加载时间,以下是可以使用的一些其他方法:
- 图像压缩
- 使用渐进式 JPEG
- 为连接速度较慢的用户提供较小的图像
- 使用 HTTP/2 、HTTP/3 而不是 HTTP/1.1
- 使用图像集
减少服务器调用次数
通常,前端向服务器发出的请求越多,加载的时间就越长。因为在呈现页面之前,向服务器发送任何请求都需要完全通信。可以通过多种方式来减少加载页面所需的服务器请求数量。
- CSS Sprites :这是减少服务器调用次数的最简单方法之一,主要是减少UI相关的图片资源。实现原理不是加载10个独立的图像到网站,而是使用图像集合拼接成一个图像文件,然后通过使用 CSS 中的
background-image
和background-position
属性来显示所需的图像区域。这样做可以减少了所需的服务器请求数量。 - 减少第三方插件的大量外部请求。
- 防止链接到不存在的文件。
此外,还可以查看服务器端渲染以加快应用程序的初始加载速度。
删除不必要的字体
自定义字体已经变得非常流行,因为它有助于为网站添加个性化展示,但这些是以牺牲性能为代价。
自定义字体的大小可能非常大,特别是中文字体,而网络字体(例如 Google 字体)会将 HTTP 请求添加到外部资源,这会影响页面渲染的速度。
以下是在网站中使用字体时可以采取的优化措施:
- 将字体转换为最有效的格式:加载像
WOFF2
这样的现代格式可以使字体文件大小比其他格式减少约 30%。 - 子集字体以删除未使用的字符:综合字体文件包含许多可能永远不会使用的语言的字符。通过子集字体,可以从字体中删除不需要的字符,只保留需要在网站上编写内容的内容。
- 预加载页面明确用到的字体。
延迟加载
延迟加载有助于进一步缩短前端加载时间。使用延迟加载,网页首先只加载需要的内容,并在用户需要时加载剩余的内容。
除了延迟占位符加载之外,还有其他几个选项,例如,原生延迟加载和模糊图像效果。
缓存
如果不加缓存,用户每次访问都需要重新下载所有的资源,避免类似现象的最佳方法是使用缓存技术。如果配置适当,浏览器会将文件存储在其本地缓存中,并避免为来自服务器的后续页面访问加载相同的资源。
- 缓存服务器:用户请求从缓存服务器集合发送到最近的缓存服务器,即CDN。
- 内存缓存:通过将数据的某些部分(例如:JavaScript 变量)存储在内存中,无需为路由更改重新加载它们。
- 磁盘缓存:类似于内存缓存,不同之处在于它使用通常由浏览器处理的传统文件存储。
使用预取
资源预取是另一种可用于优化前端数据加载性能的增强技术。作为开发人员,比浏览器更了解应用程序。因此,预取使用此信息来提示浏览器即将可能需要的资源。
预取加载资源以预期它们需要减少资源的等待时间。主要有三种类型的预取。虽然链接预取是最流行和最广泛使用的方法,但 DNS 预取和预渲染也是有用的选项。
链接预取
链接预取使浏览器能够收集用户可能在最近的将来请求的资源。因此,开发人员可以假设用户可能访问特定网页的位置。
但是,链接预取仅适用于图像和 JavaScript 等可缓存资源。
DNS预取
每当用户请求托管在特定 IP 地址中的资产时,就会执行 DNS 查找以查找 IP 地址所属的域名。
DNS 预取允许浏览器在后台对网页中的链接执行 DNS 查找,同时用户浏览当前页面,以最大限度地减少用户在启用 DNS 预取的情况下单击链接时的延迟。
CDN
前端内容(包括 HTML 页面、样式表、JavaScript 文件和图像)的加载速度可以使用 CDN 进行优化,效果也是最明显的。CDN 是一组分布在多个地理位置的服务器,用于存储内容的缓存版本以快速响应给最终用户。
还有一种特定类型的 CDN,称为图像 CDN,它非常擅长优化图像。有了这些,可以节省40-80%
的图像文件大小。鉴于图像通常占据页面重量的一半以上,为图像集成 CDN 可以显着提高加载速度。
总结
性能黄金法则:80-90%
的最终用户响应时间用于下载前端组件,例如图像、样式表、脚本等。
因此,优化前端数据加载对于降低跳出率和增加用户在网站上的停留时间至关重要。