当前位置: 首页 > news >正文

图片预加载和懒加载

图片预加载

图片预加载是指在页面展示之前提前加载即将使用到的图片资源,以便当用户需要查看时,能够直接从本地缓存中快速渲染,从而提高页面加载速度和用户体验。

原理

图片预加载通过提前将图片下载到浏览器缓存中,当用户实际需要查看图片时,可以直接从缓存中读取,避免了再次从服务器下载的过程,从而减少了加载时间。

实现方法

  • 使用HTML标签:在HTML中直接插入标签,并设置src属性为要预加载的图片URL,同时可以通过设置style="display:none;"来隐藏图片,使其不影响页面布局。
<!-- 在HTML中直接插入<img>标签,并设置src属性为要预加载的图片URL,同时隐藏图片 -->  
<img src="preload-image.jpg" style="display:none;" alt="Preloaded Image">
  • 使用CSS:通过CSS的background-image属性将图片作为背景图加载,并设置足够大的负偏移量,使其不在页面上显示。
<!-- 在HTML中插入一个用于预加载的元素 -->  
<div class="preload-image"></div>  <!-- 在CSS中设置背景图和足够大的负偏移量 -->  
<style>  
.preload-image {  width: 1px; /* 设置为1px,因为只是为了预加载 */  height: 1px;  background-image: url('preload-image.jpg');  background-position: -9999px -9999px; /* 设置足够大的负偏移量 */  
}  
</style>
  • 使用JavaScript:创建一个新的Image对象,设置其src属性为要预加载的图片URL,并监听onload事件以确保图片加载完成。
//在HTML中可能不需要特别的标记,除非想在加载完成后显示图片  
//在JavaScript中创建一个新的Image对象,并设置src属性和onload事件 
<script>  
var preloadImage = new Image();  
preloadImage.src = 'preload-image.jpg';  
preloadImage.onload = function() {  // 图片加载完成后的操作,例如:console.log('图片预加载完成!');  console.log('图片预加载完成!');  
};  
</script>

图片懒加载

图片懒加载(也称为延迟加载)是指在页面加载完成后,只加载用户当前可见区域或即将进入可见区域的图片资源。当用户滚动页面时,再根据需要加载其他区域的图片。

原理

图片懒加载通过延迟加载非必要资源,减少了初始页面加载时间和网络请求量。它只加载用户当前能够看到或即将看到的图片,对于当前不可见的图片则暂时不加载,从而提高了页面的性能和用户体验。

实现方式

  • 监听滚动事件:通过监听页面的滚动事件,判断哪些图片已经进入了用户的可视区域,然后动态设置这些图片的src属性为真实的图片URL。
<template>  <div>  <img  v-for="image in images"  :key="image.id"  :data-src="image.src"  class="lazy"  @load="handleImageLoad"  alt="Lazy loaded image"  />  </div>  
</template>  <script>  
import { onMounted, onUnmounted, ref } from 'vue';  export default {  setup() {  const images = ref([  { id: 1, src: 'real-image-1.jpg' },  { id: 2, src: 'real-image-2.jpg' },  // 更多图片...  ]);  const handleImageLoad = () => {  // 图片加载完成的处理逻辑  };  const isInViewport = (element) => {  const rect = element.getBoundingClientRect();  return (  rect.top >= 0 &&  rect.left >= 0 &&  rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&  rect.right <= (window.innerWidth || document.documentElement.clientWidth)  );  };  const lazyLoad = () => {  const imgs = document.querySelectorAll('img.lazy');  imgs.forEach((img) => {  if (isInViewport(img) && !img.complete) {  img.src = img.dataset.src;  }  });  };  onMounted(() => {  window.addEventListener('scroll', lazyLoad);  window.addEventListener('resize', lazyLoad);  lazyLoad(); // 初始加载  });  onUnmounted(() => {  window.removeEventListener('scroll', lazyLoad);  window.removeEventListener('resize', lazyLoad);  });  return { images, handleImageLoad };  },  
};  
</script>  <style>  
img.lazy {  width: 100%;  height: auto;  opacity: 0;  transition: opacity 0.3s;  
}  
img.lazy.loaded {  opacity: 1;  
}  
</style>
  • 使用Intersection Observer API:Intersection Observer API提供了一种异步监听目标元素与其祖先元素或顶级文档视窗交叉状态的方法。当目标元素进入可视区域时,可以自动触发加载操作。
<template>  <div>  <img  v-for="image in images"  :key="image.id"  :data-src="image.src"  class="lazy"  @load="handleImageLoad"  alt="Lazy loaded image"  ref="imageRefs"  />  </div>  
</template>  <script>  
import { onMounted, ref } from 'vue';  export default {  setup() {  const images = ref([  { id: 1, src: 'real-image-1.jpg' },  { id: 2, src: 'real-image-2.jpg' },  // 更多图片...  ]);  const imageRefs = ref([]);  const handleImageLoad = () => {  // 图片加载完成的处理逻辑  };  const observer = new IntersectionObserver((entries) => {  entries.forEach((entry) => {  if (entry.isIntersecting) {  const img = entry.target;  img.src = img.dataset.src;  observer.unobserve(img);  }  });  }, {  rootMargin: '0px',  threshold: 0.1  });  onMounted(() => {  imageRefs.value.forEach((img) => {  observer.observe(img);  });  });  return { images, handleImageLoad, imageRefs };  },  
};  
</script>  <style>  
/* 同上 */  
</style>
  • 第三方库或插件:许多前端框架和库都提供了懒加载的支持,如React的Lazy和Suspense组件、Vue的vue-lazyload插件等。
npm install vue-lazyload --save
// main.js 或类似的入口文件  
import Vue from 'vue';  
import VueLazyload from 'vue-lazyload';  Vue.use(VueLazyload, {  preLoad: 1.3,  error: 'dist/error.png',  loading: 'dist/loading.gif',  attempt: 1  
});  // 在你的Vue组件中  
<template>  <div>  <img v-lazy="'real-image.jpg'" alt="Lazy loaded image">  </div>  
</template>

相关文章:

图片预加载和懒加载

图片预加载 图片预加载是指在页面展示之前提前加载即将使用到的图片资源&#xff0c;以便当用户需要查看时&#xff0c;能够直接从本地缓存中快速渲染&#xff0c;从而提高页面加载速度和用户体验。 原理 图片预加载通过提前将图片下载到浏览器缓存中&#xff0c;当用户实际…...

Java中的数据可视化与图表库选择

Java中的数据可视化与图表库选择 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代软件开发中&#xff0c;数据可视化是将抽象数据转化为易于理解的图形化…...

STM32-TIM定时器

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. TIM1.1 TIM定时器1.2 定时器类型1.3 基本定时器1.4 通用定时器1.4 高级定时器1.5 定时中断基本结构1.6 预分频器时序1.7 计数器时序1.8 计数器无预装时序1.9 计数器有预装时序1.10 RCC时钟树 2. TIM库函数…...

Python OpenCV与霍夫变换:检测符合特定斜率范围的直线

在计算机视觉和图像处理领域&#xff0c;检测图像中的直线是一项常见且重要的任务。OpenCV 提供了许多强大的工具来进行图像处理&#xff0c;其中霍夫变换&#xff08;Hough Transform&#xff09;就是用于检测直线的经典方法。本文将介绍如何使用 OpenCV 和霍夫变换来检测图像…...

ubuntu22.04+pytorch2.3安装PyG图神经网络库

ubuntu下安装torch-geometric库&#xff0c;图神经网络 开发环境 ubuntu22.04 conda 24.5.0 python 3.9 pytorch 2.0.1 cuda 11.8 pyg的安装网上教程流传着许多安装方式&#xff0c;这些安装方式主要是&#xff1a;预先安装好pyg的依赖库&#xff0c;这些依赖库需要对应上pyth…...

新型开发语言的试用感受-仓颉语言发布之际

经常听一些媒体介绍一些新型的开发语言&#xff0c;所以最近心血来潮&#xff0c;安装了几种感受了一些。 先看名气&#xff0c;如ziglang&#xff0c;网址为&#xff1a;Home ⚡Zig Programming Language 号称是可以取代C语言的一门新语言&#xff0c;其实我主要是受下面这篇…...

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…...

【Web】

1、配仓库 [rootlocalhost yum.repos.d]# vi rpm.repo ##本地仓库标准写法 [baseos] namemiaoshubaseos baseurl/mnt/BaseOS gpgcheck0 [appstream] namemiaoshuappstream baseurlfile:///mnt/AppStream gpgcheck0 2、挂载 [rootlocalhost ~]mount /dev/sr0 /mnt mount: /m…...

kafka-3

Kafka 消费组 consumer-offsets-N 稀疏索引 Kafka集群 集群搭建 集群启动和验证 Topic的意义 Topic和Partition 分区 副本 集群操作指令 多分区&多副本 多分区消费组 Rebalance机制 Rebalance机制处理流程 Rebalance机制-Range Rebalance机制-RoudRobin Rebalance机制-St…...

MySQL性能优化 二、表结构设计优化

1.设计中间表 设计中间表&#xff0c;一般针对于统计分析功能&#xff0c;或者实时性不高的需求。 2.设计冗余字段 为减少关联查询&#xff0c;创建合理的冗余字段&#xff08;创建冗余字段还需要注意数据一致性问题&#xff09; 3.折表 对于字段太多的大表&#xff0c;考…...

用HttpURLConnection复现http响应码405

目录 使用GET方法&#xff0c;访问GET接口&#xff0c;服务端返回405使用GET方法&#xff0c;访问POST接口&#xff0c;服务端返回405使用POST方法&#xff0c;访问GET接口&#xff0c;服务端返回405 使用GET方法&#xff0c;访问GET接口&#xff0c;服务端返回405 发生场景&a…...

2-27 基于matlab的一种混凝土骨料三维随机投放模型

基于matlab的一种混凝土骨料三维随机投放模型&#xff0c;为混凝土细观力学研究提供一种快捷的三维建模源代码。可设置骨料数量&#xff0c;边界距离、骨料大小等参数。程序已调通&#xff0c;可直接运行。 2-27 matlab 混凝土骨料三维随机投放模型 - 小红书 (xiaohongshu.com)…...

ISA95-Part4-业务流程的解析与设计思路

MES/MOM系统实现ISA-95标准的业务流程通常遵循以下思路,并包含一系列内容。 一、功能模块: 1. 需求分析与规划: - 确定业务流程需求,包括订单管理、生产调度、库存控制等,并规划如何将这些流程与MES/MOM系统集成。 2. 系统集成架构设计: - 设计一个系统集成架构,确保M…...

【Spring Cloud】一个例程快速了解网关Gateway的使用

Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关&#xff0c;包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式&#xff0c;并为它们提供一些网关基本功能&#xff0c;例如&…...

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页&#xff0c;多媒体视频类微信小程序ui前端模板下载。包含&#xff1a;视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码...

数据库存储引擎

MySQL体系结构 存储引擎 -- 查询建表语句 show create table account; -- 查询引擎 show engines; InnoDB 特点 DML操作遵循ACID模型,支持事务 行级锁&#xff0c;提高并发访问性能支持外键约束 文件 xxx.ibd&#xff1a;xxx代表的是表名,innoDB引擎的每张表都会对应这样…...

【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计

系统功能: 显示时间&#xff0c;温湿度&#xff0c;体温信息&#xff0c;播放音乐及控制红外小夜灯&#xff0c;通过蓝牙模块连接手机APP。 系统上电后OLED显示“欢迎使用智能手表系统请稍后”&#xff0c;两秒后进入正常页面显示 第一行显示获取到的当前时间 第二行显示获…...

利用面向AWS的Thales Sovereign解决方案保护AI之旅

亚马逊网络服务(AWS)是全球最大的云服务提供商。众所周知&#xff0c;他们致力于提供工具、解决方案和最佳实践&#xff0c;使其客户能够安全地利用AWS上的生成式人工智能 (GenAI) 工作负载。组织正在迅速使用GenAI为企业带来更高的生产力和创造力。在GenAI的几乎所有用途中&am…...

学习笔记——交通安全分析13

目录 前言 当天学习笔记整理 5城市主干道交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期12笔记 当天学习笔记整理 5城市主干道交…...

PHP-实例-文件上传

1 需求 2 basename 在 PHP 中&#xff0c;basename() 函数用于返回路径中的文件名部分。如果路径中包含了文件扩展名&#xff0c;则该函数也会返回它。如果路径的结尾有斜杠&#xff08;/&#xff09;或反斜杠&#xff08;\&#xff09;&#xff0c;则 basename() 函数会返回空…...

LeetCode刷题之HOT100之完全平方数

2024 7/7 转眼间就到周日啦&#xff01;昨天下午开组会&#xff0c;开了三个半小时。如坐针毡&#xff0c;会后跑了个步、洗了个澡、洗了衣服、躺床上看了会《罪与罚》&#xff0c;睡着了。早上起来&#xff0c;去拿我昨晚充电的车&#xff0c;当我看到车没有停在昨天的位置&am…...

【SpringCloud应用框架】Nacos集群架构说明

第六章 Spring Cloud Alibaba Nacos之集群架构说明 文章目录 前言一、Nacos支持三种部署模式二、集群部署说明三、预备环境 前言 到目前为止&#xff0c;已经完成了对Nacos的一些基本使用和配置&#xff0c;接下来还需要了解一个非常重要的点&#xff0c;就是Nacos的集群相关的…...

JS进阶-作用域

学习目标&#xff1a; 掌握作用域 学习内容&#xff1a; 作用域局部作用域全局作用域作用域链JS垃圾回收机制拓展-JS垃圾回收机制-算法说明闭包变量提升 作用域&#xff1a; 作用域规定了变量能够被访问的"范围"&#xff0c;离开了这个"范围"变量便不能被…...

stm32 使用GPIO模拟串口发送

在STM32微控制器上实现模拟串口输出&#xff08;也称为软件串口或比特邦定&#xff08;Bit-Banging&#xff09;串口&#xff09;&#xff0c;主要是因为硬件上的UART资源有限或者为了特定需求而需要更多的串口通信接口。模拟串口意味着使用GPIO引脚模拟UART的TX&#xff08;发…...

数据的统计探针:SKlearn中的统计分析方法

数据的统计探针&#xff1a;SKlearn中的统计分析方法 在数据科学领域&#xff0c;统计分析是理解和解释数据的关键工具。Scikit-learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中一个功能强大的机器学习库&#xff0c;提供了多种方法来进行数据的统计分析。…...

实例演示Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…...

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份&#xff1a;2024 作者&#xff1a;刘子耀&#xff0c;陈晨&#xff0c;南洋理工大学 期刊&#xff1a; 未发表 引用量&#xff1a;6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…...

Python数据分析实战,运输车辆驾驶行为分析,案例教程编程实例课程详解

引言 运输车辆的安全驾驶行为分析是确保道路安全、提高运输效率的重要环节。随着数据采集技术的发展和数据分析工具的普及,利用Python进行数据分析已成为这一领域的重要工具。本文将详细介绍如何使用Python进行运输车辆驾驶行为分析,涵盖数据采集、数据预处理、数据分析及结果…...

网络安全法对等级保护中的权利和义务有何规范?

在数字时代的交响乐章中&#xff0c;网络安全法与等级保护共同编织了一曲关于权利与义务的和谐旋律。《中华人民共和国网络安全法》作为我国网络安全领域的基本法&#xff0c;对等级保护提出了明确的规范&#xff0c;旨在构建一个安全、有序的网络空间。本文将深入解析网络安全…...

苹果清理软件:让你的设备焕然一新

随着时间的推移&#xff0c;无论是Mac电脑还是iOS设备&#xff0c;都可能会因为积累的垃圾文件、缓存、未使用的应用和其他冗余数据而开始表现出性能下降。这不仅会占用宝贵的存储空间&#xff0c;还可能影响设备的响应速度和电池寿命。幸运的是&#xff0c;有多种苹果清理软件…...