相关免费学习推荐:javascript(视频)
在 web 应用程序中性能至关重要。你可以拥有世界上最漂亮、最吸引人的网站,但如果它不能在浏览器上快速加载,人们会倾向于略过它。要想使你的网站表现得非常好,可能相当棘手。这是因为 web 开发中存在许多瓶颈,例如高代价的 JavaScript、缓慢的 web 字体显示、笨重的图片资源等等。
本文我们主要关注图片资源对网站的影响。根据 Jecelyn 研究,一个网页仅用于加载图片平均就要消耗 5MB 的数据。这对用户来说可能是一个沉重的负担,因为某些国家的移动数据非常昂贵。用户也会遇到站点加载时间过久的问题,尤其是在网速较慢的情况下。这些都会对你的网站产生负面影响。
根据 Jakob Nielson 研究,以下是一些你应该记住的重要统计数据:
有几种策略可以为网站的图片资源提供高效服务,而不会影响性能和质量,懒加载就是其中之一。懒加载是指只加载所需的内容,并将其余内容延迟到需要的时候。这个策略可以应用于图片、视频、文本和其他类型的数据。但大多数情况下,它适用于图片资源等笨重内容。
有好几种方法可以在网站上实现图片懒加载。例如可以使用 Intersection Observer API
,或者使用事件处理程序来确定元素是否在视图中。还有几个功能强大的 JavaScript 库,可以根据需要和兼容性使用以下几种图片懒加载库的方法。让我们来看看吧!
Lazy Sizes 是目前最好的懒加载库之一,在 Github 上拥有超过 14.1K 收藏,把它压缩后只有 3.4kB。它还支持大约 98.5% 的浏览器用户,同时它的文档也写的通俗易懂。
IntersectionObserver
、MutationObserver
和 getElementsByClassName
等。你可以在这里查看示例。
Lozad.js 支持图片、iframe
、广告、视频和其他元素的懒加载。它在 Github 上拥有近 6.4K 收藏,在社区里非常受欢迎。据研究小组称,这个库被特斯拉、多米诺、小米和 BBC 等几个品牌的网络应用程序所使用。它非常小巧,压缩后只有 1.1kB。由于它使用 IntersectionObserver
API 和 MutationObserver
API,所以它支持大约 92% 的浏览器用户。
getBoundingClientRect()
的库更高效。你可以在这里查看示例。
Tuupola 的 Lazyload 是 Github 上另一个流行的图片懒加载库,有近 8.4K 收藏。它使用了 IntersectionObserver
API,并且简单易用。压缩后仅有 956 bytes,比其他的库都小。这可以归功于它只使用了 IntersectionObserver
API,因为其他库使用了别的组合来实现更好的兼容性和性能。此外,由于这一点,目前 92% 的浏览器用户都支持它。
IntersectionObserver
API。Vanilla lazy load 是另一个用于延迟加载图片、视频和 iframe 的纯粹 JavaScript 库。它在 Github 上非常受欢迎,有将近 1500 个存储库和包可供使用。它在 NPM 中每年有超过 190 万次的下载。把它压缩后仅有 2.7kB。与其他库类似,该库使用 IntersectionObserver
API,92% 的浏览器用户支持该库。
你可以在这里查看示例。
Yall.js 是另外一个 JavaScript 库,也只使用 IntersectionObserver
API 来延迟加载图片、视频、iframe
和 CSS 背景图片。这个库大约有 1.1K 收藏,并且有 91 个用户在其项目库中使用。这个库可以压缩到 1kB。正如我们在以前的库中所见,因为使用了 IntersectionObserver
API,Yall.js 也支持 92% 的浏览器用户。必须注意,如果浏览器不支持 IntersectionObserver
API,则不会有备份。在那种情况下你必须用 polyfill
。
MutationObserver
API 支持动态加载元素的检测。requestIdleCallback
方法优化浏览器空闲时间。src
属性直接实现 LQIP。Layzr.js 是一个基于 JavaScript 的轻量级图片懒加载库。它主要使用 Element.classList
,很少有 ES5 数组方法和 requestAnimationFrame
方法。由于这些 API,97% 以上的浏览器用户都支持该库。Layzr.js 在 Github 上拥有超过 5.6K 收藏,非常受欢迎,把它压缩后只有 1kB。
你可以在这里查看示例。
Blazy.js 是另一个轻量级的 JavaScript 懒加载库,能够处理图片、视频和 iframe
。它在 Github 上非常流行,有 2.6K 收藏,目前有超过 860 个开源项目库在使用。它压缩后只有 1.9kB。
使用 Element.getBoundingClientRect()
方法,与实现 IntersectionObserver
API 的其他库相比,该方法可能无法执行。但是由于这种方法,这个库有超过 98% 的浏览器用户支持。它还使用 Element.closest()
。这个 API 的浏览器支持率仅超过 94%。在这种情况下,您不必担心遗漏的 6%,因为库包含一个用于不支持浏览器的 polyfill
。
你可以在这里查看示例。
Responsively lazy 也是用于图片的懒加载库。它的内容简洁,压缩后只有 1.1kB。由于它良好的语法实现,让其从众多库中脱颖而出。上面我们讨论过的大多数库都要求您对禁用 javascript 的浏览器使用 noscript
标记,忽略 src
属性等。但是 lazy 可以使用传统的 src
属性,并为受支持的浏览器添加 srcset
和 src
属性。这使得这个库对搜索引擎优化(SEO)友好。这个库也使用 Element.getBoundingClientRect()
因此,因此强制布局重排也将出现在该库中。
此外,这个库在 Github 上有近 1.1K 收藏,几乎 95% 的浏览器用户都支持这个库。
你可以在这里查看示例。
LazyestLoad.js 是此列表中最小的库之一。它只有 700 字节,压缩后仅仅 639 字节。这个库有两个版本,lazyload
和 lazyestload
。它们都有不同的用法,lazyload
版本的工作方式与普通库类似,图片将在其即将进入视口时加载;但是 lazyestload
版本只在用户停止滚动且图片在视口中或在 100 像素以内时,才会加载图片。这有助于减少网络负荷,如果用户只是滚动而不暂停看图片。
它主要使用 Element.getBoundingClientRect()
方法,与其他实现相比效率不高,还有众所周知的触发布局重排。
这个库只处理图片,不像其他库可以处理视频和 iframe
的库。它在 Github 上还有超过 1.5 万收藏。
你可以查看 lazyload 示例和查看 lazyestload 示例。
随着大多数现代浏览器都将支持原生的懒加载,因此建议使用原生实现。原生懒加载还可以确保即使在浏览器中禁用 JavaScript,图片也可以延迟加载。只需在 img
标记中使用 loading="lazy"
属性,就可以省去所有麻烦。
大多数现代浏览器都支持原生懒加载,并且也即将支持 Safari 浏览器。目前,浏览器的支持率为 74%,如果浏览器不支持原生实现则可以使用 polyfill 或者上述懒加载库中的某个库。
为了安全起见,您可能仍需要使用动态导入来实现其中一个库。
如果您仔细分析以上所有给定的库,您会发现它们在三个方面存在激烈的竞争:性能、大小和浏览器兼容性(用户覆盖率)。这些通常不得不牺牲至少一个来提高另一个的水平。
例如,如果您使用实现 IntersectionObserver
API 的库,您将获得一个高性能的库,但它的用户覆盖范围会更小。如果需要修补,则需要有后备选项,例如 polyfills
,这将增加库的整体大小。
在另一个示例中,如果懒加载库使用 getBoundingClientRect()
方法,它的性能将不如 IntersectionObserver
API,因为众所周知它存在强制布局回流问题。虽然牺牲了性能,但用户覆盖率将高于前者。希望我能把这一点说清楚。
如何将兼容性问题降至最低并最大限度地提高性能?
可以通过了解目标受众及其浏览器使用情况来改进这些方面。如果你知道你的目标受众和他们使用的浏览器,你可以确保你的延迟加载的实现更适合那些浏览器版本。这将减少对不受支持的浏览器包含 polyfill
的需要,因为已经知道需要关注哪些浏览器。当你有一个异常值(不支持的浏览器),图片可以直接加载没有任何延迟或延迟。如果你对受众有很好的了解,那么这些异常值的数量将可以忽略不计。
这种方法将有助于使用性能良好的实现库,通过忽略浏览器异常将库大小保持在最小值,并支持目标用户的浏览器版本。
本文简要讨论了 JavaScript 的懒加载库以及一些提高效率和改善用户体验的方法。请在下面的评论中发表你的看法。
感谢阅读,祝编码快乐!!
Atas ialah kandungan terperinci 给大家分享九个 JavaScript 图片懒加载库. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!