- 懒加载原理
- 基于Intersection Observer API(主要方式)
- Intersection Observer简介:
Intersection Observer是浏览器提供的一个API,用于异步地观察目标元素与祖先元素或视口(viewport)的交叉状态。它允许开发者轻松地检测元素是否进入或离开视口,以及交叉部分的比例等信息。 - 在vue - lazyload中的应用:
vue - lazyload库利用Intersection Observer来监控图片元素是否进入浏览器的可视区域。当组件中的img标签使用v - lazy指令绑定图片源时,vue - lazyload会为这个img元素创建一个Intersection Observer实例来进行观察。 - 例如,在一个单文件组件中有如下代码:
<template>
<div>
<img v - lazy="productImageSrc" alt="Product Image">
</div>
</template>
<script setup>
import { ref } from 'vue';
const productImageSrc = ref('https://example.com/product - image.jpg');
</script>
- 在这里,`vue - lazyload`会等待`img`元素进入可视区域。当`Intersection Observer`检测到`img`元素进入可视区域后,它会触发一个回调函数,这个回调函数会开始加载图片。
- Fallback机制(兼容性处理)
- 不支持Intersection Observer API的情况:在一些旧的浏览器中可能不支持
Intersection ObserverAPI。vue - lazyload提供了一个备用(fallback)机制来确保在这些浏览器中也能实现基本的懒加载功能。 - 使用事件监听实现懒加载:它通过监听
scroll和resize事件来模拟检测元素是否进入可视区域。当这些事件发生时,会检查所有绑定了v - lazy指令的元素,通过计算元素的位置和浏览器视口的位置关系来判断元素是否可见。这种方式虽然不如Intersection Observer高效,但能够在不支持新API的浏览器中提供类似的懒加载功能。
- 缓存原理(简单缓存策略)
- 内存缓存机制
- 内部缓存对象:
vue - lazyload内部可能维护了一个简单的内存缓存对象,用于存储已经加载过的图片信息。当一张图片第一次加载完成后,它的相关信息(如图片源、加载后的对象等)可能会被存储在这个缓存对象中。 - 缓存命中检查:当需要再次加载相同的图片时(例如,在同一页面中多个地方使用相同的图片源,或者用户切换页面后又回到包含相同图片的页面),
vue - lazyload会先检查这个内存缓存。如果缓存中有对应的图片信息,就直接使用缓存中的图片,而不需要再次发起网络请求,从而提高图片加载速度。
- 结合浏览器缓存利用(间接利用)
- 依赖浏览器缓存头:
vue - lazyload本身没有复杂的浏览器缓存控制机制,但它会依赖浏览器对图片资源的缓存策略。当浏览器根据服务器返回的缓存头(如Cache - Control和Expires)来缓存图片时,vue - lazyload再次请求相同的图片源时,如果浏览器从本地缓存中获取了图片,那么vue - lazyload也会受益于这种缓存,减少实际的网络请求。