前端性能优化——图片压缩和懒加载

图片压缩

  1. 使用第三方工具手动压缩图片
  2. 使用Webpack工具在打包时自动压缩图片

这里主要介绍第二种方法。
(1)将小于某个大小的图片转化成 data URI 形式(Base64 格式),减少请求数量,但是体积变得更大

module: {rules: [test: /\.(png|jpe?g|gif|svg)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 10 * 1024,},},},],},

(2)调用第三方依赖,在打包时压缩图片

optimization: {minimize: isProduction,// 压缩的操作minimizer: [new ImageMinimizerPlugin({minimizer: {implementation: ImageMinimizerPlugin.imageminGenerate,options: {plugins: [["gifsicle", { interlaced: true }],["jpegtran", { progressive: true }],["optipng", { optimizationLevel: 5 }],["svgo",{plugins: ["preset-default","prefixIds",{name: "sortAttrs",params: {xmlnsOrder: "alphabetical",},},],},],],},},}),],},

图片懒加载

  1. 使用vue-lazyload组件
// main.js
import { createApp } from 'vue'
import App from './App.vue'import VueLazyLoad from 'vue-lazyload'const app = createApp(App);app.use(VueLazyLoad, {preLoad: 1,error: require('./assets/image/error.jpg'),loading: require('./assets/image/loading.gif'),attempt: 2,
});
app.mount('#app');
// index.vue
<template><div><img v-lazy="picture1" class="img" alt="" /></div><div class="abc" /><div><img v-lazy="picture2" alt="" /></div>
</template><script setup>
const picture1 = '/assets/image/camera0.png'
const picture2 = '/assets/image/camera1.png'
</script><style style="less" scoped>
.abc {height: 1200px;
}
.img {height: 200px;width: 300px;
}
</style>

先只加载可视区域的图片

在这里插入图片描述

随着滑动窗口,开始加载其它图片

在这里插入图片描述

  1. 使用Intersection Observer API自定义实现图片懒加载

Intersection Observer 允许用户得知被观察的元素何时进入或退出浏览器的视口。

import { useIntersectionObserver } from "@vueuse/core";
import defaultImg from '@/assets/image/1.png'const lazyDirective = {mounted(el, binding) {el.src = defaultImg;console.log('lazy', el, binding.value);const loadImage = () => {el.src = binding.value;el.onerror = () => el.src = defaultImg;};const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => {if (isIntersecting) {loadImage();stop();}});}
};export default {install(app) {app.directive('lazy', lazyDirective);}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/437926.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 构建开发环境

本博客主要讲解了如何创建一个Maven构建Java项目。&#xff08;本文是创建一个用Maven构建项目的方式&#xff0c;所以需要对Maven有一定的了解&#xff09; IDEA 构建开发环境 一、创建一个空工程二、构建一个普通的Maven模块 一、创建一个空工程 创建一个空的工程 * 设置整…

C++多线程1(复习向笔记)

创建线程以及相关函数 当用thread类创建线程对象绑定函数后&#xff0c;该线程在主线程执行时就已经自动开始执行了,join起到阻塞主线程的作用 #include <iostream> #include <thread> #include <string> using namespace std; //测试函数 void printStrin…

进阶-宏观.总体(二)失业、利率,税收、物价、供给侧政策、汇率

32&#xff0e;经济的跷跷板之一&#xff1a;成长与失业 失业是任何一个社会都会发生的现象。从某个观点来说&#xff0c;一定程度内的失业是正常的&#xff0c;也应是社会中被允许发生的现象&#xff1b;它是社会中正常的新陈代谢&#xff0c;也可能是社会进步的必然。 分析四…

《HTML 简易速速上手小册》第6章:HTML 语义与结构(2024 最新版)

文章目录 6.1 语义化标签的重要性6.1.1 基础知识6.1.2 案例 1&#xff1a;使用 <article>, <section>, <aside>, <header>, 和 <footer>6.1.3 案例 2&#xff1a;构建带有嵌套语义化标签的新闻网站6.1.4 案例 3&#xff1a;创建一个带有 <mai…

力扣题目训练(3)

2024年1月27日力扣题目训练 2024年1月27日力扣题目训练290. 单词规律292. Nim 游戏303. 区域和检索 - 数组不可变91. 解码方法92. 反转链表 II41. 缺失的第一个正数 2024年1月27日力扣题目训练 2024年1月27日第三天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包…

node后端服务框架

前言&#xff1a; 随着互联网的快速发展&#xff0c;Web 开发已成为当今计算机领域中非常重要的一部分。 Node.js 的出现为前端开发者提供了一个全新的方向&#xff0c;使得他们可以同时涉足前端和后端开发。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff…

sqli.labs靶场(第18~22关)

18、第十八关 经过测试发现User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0加引号报错 这里我们闭合一下试试 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0,127.0.0.1,adm…

【Python笔记-设计模式】抽象工厂模式

一、说明 (一) 解决问题 抽象工厂是一种创建型设计模式&#xff0c;主要解决接口选择的问题。能够创建一系列相关的对象&#xff0c;而无需指定其具体类。 (二) 使用场景 系统中有多于一个的产品族&#xff0c;且这些产品族类的产品需实现同样的接口。 例如&#xff1a;有…

SQL注入的剩余类型

除了联合查询注入&#xff0c;报错注入&#xff0c;盲注注入 sql注入还有以下几类&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9; 开始填坑 1.UA注入 原理&#xff1a;有些网站会把用户的UA信息写入数据库&#xff0c;用来收集和统计用户…

elementui的el-table自定义控制展开事件,实现“展开”“收起”的切换(两种效果)【超级完整式代码】

第一种&#xff1a;多行点击展开其他行不收起 先看效果图 直接上代码 【核心代码添加标注简单易懂】 <el-tableref"multipleTable":data"smsLogList.slice((currentPage - 1) * pageSize_, currentPage * pageSize_)"tooltip-effect"dark"st…

Python拼接字符串

在Python编程中&#xff0c;字符串拼接是一项常见的操作&#xff0c;它可以用于将多个字符串连接起来形成一个新的字符串&#xff0c;是处理文本数据和字符串操作的基本技巧之一。 1. 使用""运算符进行字符串拼接 最常见的字符串拼接方法是使用""运算符&…

专业130+总分390+第二名中国海洋大学946信号与系统考研经验电子信息通信

今年专业946信号与系统130&#xff0c;总分390&#xff0c;专业排名第2顺利上岸中国海洋大学&#xff0c;总结一下自己的复习经验希望对大家复习有所帮助&#xff0c;每个人的学习习惯不同&#xff0c;大家要对自己有信心&#xff0c;借鉴加上自己整合&#xff0c;属于自己的才…