【面试官常问】什么是图片懒加载?

首先,让我们回顾一下为什么需要图片懒加载。在没有图片懒加载的情况下,页面加载时会同时请求所有图片,这可能导致以下问题:

  1. 延迟页面加载时间: 如果页面包含大量的图片,所有这些图片都在页面加载时同时请求,会导致页面加载时间显著增加,用户需要等待更长的时间才能看到内容。

  2. 浪费带宽: 加载不在可视区域的图片是一种带宽浪费。用户可能永远不会看到这些图片,但它们仍然会被下载,这浪费了用户的带宽和服务器资源。

  3. 降低用户体验: 页面加载时间过长会降低用户的体验。用户希望立即看到内容,而不是等待图片加载完成。

图片懒加载的核心思想是只有当图片出现在用户可视区域时才加载它们,从而解决了上述问题。

情况 1: 自定义指令

首先介绍的方法是使用自定义指令。自定义指令允许我们将懒加载逻辑封装成可重用的指令,然后在需要懒加载的图片元素上使用这个指令。




在上述代码中,为每张图片元素添加了 v-lazyload 指令。创建这个自定义指令并添加懒加载的逻辑。


inserted 钩子中,可以使用 Intersection Observer API 监测图片是否进入了可视区域,一旦图片进入可视区域,便可以加载它。

这是一个基本的自定义指令的骨架,你可以根据项目需求进一步定制懒加载逻辑。

情况 2: 使用第三方库

Vue.js 生态系统中有一些强大的第三方库,可以帮助你快速实现图片懒加载。其中之一是 vue-lazyload。

首先,安装 vue-lazyload

npm install vue-lazyload

 然后,在你的 Vue.js 应用中引入它并配置:


可以在模板中使用 v-lazy 指令来实现图片懒加载:


vue-lazyload 提供了丰富的配置选项,包括预加载、错误占位符、加载占位符等等,你可以根据项目需求进行自定义。

情况 3: 基于滚动事件的懒加载

在某些情况下,你可能不想使用第三方库,而是倾向于编写自己的图片懒加载逻辑。这可以通过基于滚动事件来实现。

首先,在你的 Vue 组件中,为图片元素绑定监听滚动事件的方法:


在 @load 事件中,触发了一个方法 onImageLoad(index)

然后,在组件的 methods 部分实现 onImageLoad 方法来检测图片是否进入可视区域:


这段代码检查每个图片元素是否进入可视区域,并且仅在图片未加载时才设置 src 属性。确保在图片元素上设置了 data-src 属性。

这是一种基本的滚动事件懒加载方法,你可以根据需要进一步优化和扩展。

情况 4: 使用移动端的 lazyload 属性

在移动端开发中,浏览器通常支持 lazyload 属性,这是一个原生的懒加载属性。你只需在 img 标签上添加 loading="lazy" 属性,浏览器会自动处理图片的懒加载。


这种方法非常简单,适用于移动端应用开发,因为它充分利用了浏览器的原生支持。

情况 5: 使用懒加载的 CSS 类

在某些情况下,你可以使用 CSS 类来实现图片懒加载。首先,为所有的图片元素添加一个自定义的 CSS 类,例如 lazy-load


然后,使用 JavaScript 来检测滚动事件,当图片进入可视区域时,将图片元素的 src 属性设置为图片的实际 URL。


这种方法适用于一些简单的项目,但不如 Intersection Observer 那么高效和可维护。

情况 6: 使用服务端渲染 (SSR) 或静态生成 (SSG)

最后,如果你的应用使用了服务端渲染 (SSR) 或静态生成 (SSG) 技术,那么图片懒加载通常是不必要的。因为在服务器端渲染阶段或构建阶段,你可以在页面加载时直接将图片渲染到 HTML 中,无需进行懒加载。

这是因为在 SSR 或 SSG 中,你可以在构建时或服务器端获取图片的信息,并将图片 URL 直接嵌入到生成的 HTML 中,从而减少页面加载时的请求。这种方法不仅提高了性能,还可以更好地支持搜索引擎优化 (SEO)。

你可能感兴趣的:(前端,javascript,html)