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

前端性能优化方案

一、HTML优化策略​

1、减少DOM层级​​

<!-- 避免 --><div><div><div><p>内容</p></div></div></div><!-- 推荐 --><div class="content">内容</div>

原因:嵌套过深会增加渲染树的构建时间

​​2、异步加载非关键资源​​

<!-- defer/async 区别 --><script defer src="non-critical.js"></script>  <!-- DOM解析后执行 --><script async src="analytics.js"></script>    <!-- 下载完立即执行 -->

​​3、预加载关键资源​​

<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin><link rel="prefetch" href="next-page.html">  <!-- 空闲时预加载 -->

二、CSS优化策略

1、关键 CSS 内联避免阻塞渲染 

<!-- 将非关键CSS移到body底部 -->
<link rel="stylesheet" href="non-critical.css" media="print" onload="this.media='all'">

2、减少页面重绘和回流

回流(reflow):是指由于DOM结构或样式发生改变,浏览器需要重新计算元素的几何属性,然后重新布局页面的过程

重绘(repaint):是指当元素样式发生改变,但不影响布局时,浏览器只需要重新绘制受影响的部分,而不需要重新计算布局

  • 尽量减少深度嵌套或复杂选择器的使用,以提高 CSS 渲染效率
  • 避免频繁的DOM操作‌:频繁修改DOM会导致重排和重绘,尽量批量处理DOM修改,或者使用DocumentFragment来构建DOM树后再添加到页面
  • 合理使用GPU加速:使用CSS3的硬件加速功能,可以将需要进行动画或变换的元素提升到一个独立的渲染层,从而避免浏览器进行重新布局(Reflow)和绘制(Repaint)‌。可以触发 GPU 硬件加速的 CSS 属性包括 transformfilterwill-changeposition:fixed

3、图像压缩、格式选择和精灵图

  • WebP 格式替代 JPEG/PNG(兼容性需考虑):相比于PNG和JPEG的优点主要包括更小的文件大小、更高的压缩效率和更好的图像质量保持。
  • TinyPNG压缩图片
  • 精灵图:将许多小图像合并成一个大图像。这样,在加载页面时,只需要获取一个图像来显示多个页面元素

4、图片懒加载

        仅在图像进入浏览器视口时加载图像

        将 img 的src属性设置成一张默认图片,在图片加载出来之前显示默认图片。

        用data-自定义属性名 (data-src) 接收图片的真实路径,待图片滚动到可视区域的时候开始加载图片,待图片加载出来之后替换掉之前的默认图片

 三、Javascript优化策略​

1、防抖与节流

        防抖,就是指触发事件后,在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。防抖确保函数在一段时间内只执行一次,且是在最后一次触发事件后执行。

        节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流确保函数按照固定的时间间隔执行。

2、虚拟列表优化长列表

3、Web Worker处理密集型任务​

        浏览器提供的 JavaScript 多线程解决方案,它允许在主线程之外运行脚本,避免阻塞 UI 渲染

 

四、webpack优化策略

减少打包体积(减小最终资源大小)

优化点做法
✅ Tree Shaking删除未使用代码(使用 ES6 import/export 模块规范)
✅ 压缩 JS使用 TerserPlugin 进行代码压缩(默认内置于 mode=production)
✅ 压缩 CSS使用 css-minimizer-webpack-plugin
✅ 压缩图片使用 image-webpack-loader 或在打包前压缩
✅ 忽略 Moment.js 的多语言new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /moment$/ })
✅ 使用 CDNs将大库(如 React、Vue)用 CDN 引入,设置为 externals
✅ 使用按需加载库例如 lodash-es + babel-plugin-lodash

五、CDN优化策略

CDN 优化(内容分发网络)是部署在全球各地的缓存服务器集群,将静态资源(图片、JS、CSS 等)缓存到离用户更近的服务器,提升加载速度,减少延迟。

CDN 优化策略

优化点说明配置建议
① 使用 CDN 加速静态资源加快加载速度(图片、JS、CSS、字体等)将资源上传到 CDN 服务商(如阿里云、腾讯云、七牛、Cloudflare)
② 设置域名分发资源使用独立域名,防止与主站 Cookie 冲突如静态资源用 static.example.com
③ DNS 预解析提前建立连接HTML 添加:<link rel="dns-prefetch" href="//static.example.com">
④ preconnect提前建立 TCP + TLS 连接<link rel="preconnect" href="https://cdn.example.com">
⑤ CDN 缓存控制控制资源更新策略在 CDN 控制台设置 Cache-ControlExpires

 

六、浏览器缓存优化策略

浏览器缓存通过存储资源副本(CSS、JS、图片等),避免重复请求服务器,提升性能

两类缓存方式

类型说明特点
① 强缓存(强制使用缓存)不发请求,直接读取缓存资源Cache-ControlExpires 控制
② 协商缓存(可能使用缓存)发送请求,服务端判断是否使用缓存ETagLast-Modified 控制

相关文章:

前端性能优化方案

一、HTML优化策略​ 1、减少DOM层级​​ <!-- 避免 --><div><div><div><p>内容</p></div></div></div><!-- 推荐 --><div class"content">内容</div> 原因&#xff1a;嵌套过深会增加渲染…...

前端vscode学习

1.安装python 打开Python官网&#xff1a;Welcome to Python.org 一定要点PATH&#xff0c;要不然要自己设 点击install now,就自动安装了 键盘winR 输入cmd 点击确定 输入python&#xff0c;回车 显示这样就是安装成功了 2.安装vscode 2.1下载软件 2.2安装中文 2.2.1当安…...

python实现web请求与回复

一、作为客户端发送请求&#xff08;使用requests库&#xff09; import requests # 发送GET请求 response requests.get("https://api.example.com/data") print("GET响应状态码:", response.status_code) print("GET响应内容:", response.…...

Python实现Web请求与响应

目录 一、Web 请求与响应基础 &#xff08;一&#xff09;Web 请求与响应的定义与组成 &#xff08;二&#xff09;HTTP 协议概述 &#xff08;三&#xff09;常见的 HTTP 状态码 二、Python 的 requests 库 &#xff08;一&#xff09;安装 requests 库 &#xff08;二…...

AI与.NET技术实操系列(六):实现图像分类模型的部署与调用

引言 人工智能&#xff08;AI&#xff09;技术的迅猛发展推动了各行各业的数字化转型。图像分类&#xff0c;作为计算机视觉领域的核心技术之一&#xff0c;能够让机器自动识别图像中的物体、场景或特征&#xff0c;已广泛应用于医疗诊断、安防监控、自动驾驶和电子商务等领域…...

PP-YOLOE-SOD学习笔记1

项目&#xff1a;基于PP-YOLOE-SOD的无人机航拍图像检测案例全流程实操 - 飞桨AI Studio星河社区 一、安装环境 先准备新环境py>3.9 1.先cd到源代码的根目录下 2.pip install -r requirements.txt 3.python setup.py install 这一步需要看自己的GPU情况&#xff0c;去飞浆…...

Axure系统原型设计列表版方案

列表页面是众多系统的核心组成部分&#xff0c;承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计&#xff0c;能够极大提升用户获取信息的效率&#xff0c;优化操作体验。下面&#xff0c;我们将结合一系列精心设计的列表版方案图片&#xff0c;深入探讨如何打造出实…...

腾讯音乐二面

ReentrantLock 的源码及实现 ReentrantLock 是 Java 中的一种可重入的互斥锁。它通过 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;框架来实现。AQS 使用一个 FIFO 队列来管理获取锁的线程。ReentrantLock 有公平锁和非公平锁两种模式。非公平锁&#xff1a;当线程尝…...

服务器操作系统调优内核参数(方便查询)

fs.aio-max-nr1048576 #此参数限制并发未完成的异步请求数目&#xff0c;应该设置避免I/O子系统故障 fs.file-max1048575 #该参数决定了系统中所允许的文件句柄最大数目&#xff0c;文件句柄设置代表linux系统中可以打开的文件的数量 fs.inotify.max_user_watches8192000 #表…...

MySQL5.7导入MySQL8.0的文件不成功

文章目录 问题检查原因及解决方法原因解决办法 问题 检查 检查自己的mysql版本自己检查&#xff0c;搜索“0900_ai_ci”&#xff0c;如果能搜索到&#xff0c;说明这个sql文件是从8的版本导出的 原因及解决方法 原因 MySQL 8.0默认使用utf8mb4字符集和utf8mb4_0900_ai_ci排…...

vscode连接WSL卡住

原因&#xff1a;打开防火墙 解决&#xff1a; 使用sudo ufw disable关闭防火墙...

springAI调用deepseek模型使用硅基流动api的配置信息

查看springai的官方文档&#xff0c;调用deepseek的格式如下&#xff1a; spring.ai.deepseek.api-key${your-api-key} spring.ai.deepseek.chat.options.modeldeepseek-chat spring.ai.deepseek.chat.options.temperature0.8 但是硅基流动的格式不是这样&#xff0c;这个伞兵…...

symbol【ES6】

你一闭眼世界就黑了&#xff0c;你不是主角是什么&#xff1f; 目录 什么是Symbol&#xff1f;‌Symbol特点‌&#xff1a;创建方法&#xff1a;注意点&#xff1a;不能进行运算&#xff1a;显示调用toString() --没有意义隐式转换boolean 如果属性名冲突了怎么办&#xff1f;o…...

如何用数据可视化提升你的决策力?

在数字化浪潮席卷全球的当下&#xff0c;数据已然成为企业和组织发展的核心资产。然而&#xff0c;单纯的数据堆积犹如未经雕琢的璞玉&#xff0c;难以直接为决策提供清晰有力的支持。数据可视化作为一种强大的工具&#xff0c;能够将海量、复杂的数据转化为直观、易懂的图形、…...

【C++】vector容器实现

目录 一、vector的成员变量 二、vector手动实现 &#xff08;1&#xff09;构造 &#xff08;2&#xff09;析构 &#xff08;3&#xff09;尾插 &#xff08;4&#xff09;扩容 &#xff08;5&#xff09;[ ]运算符重载 5.1 迭代器的实现&#xff1a; &#xff08;6&…...

C语言求1到n的和(附带源码和解析)

在C语言中&#xff0c;使用 for 循环求 1 到 n 的和是一个常见的编程任务。这个任务不仅可以帮助初学者理解循环的基本概念&#xff0c;还能培养他们的逻辑思维能力。 要计算 1 到 n 的和&#xff0c;我们需要创建一个循环&#xff0c;从 1 开始&#xff0c;一直累加到 n。for…...

springboot3+vue3融合项目实战-大事件文章管理系统-文章分类也表查询(条件分页)

在pojo实体类中增加pagebean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean <T>{private Long total;//总条数private List<T> items;//当前页数据集合 }articlecontroller增加代码 GetMappingpublic Result<PageBean<Article&g…...

java中定时任务的实现及使用场景

在 Java 需要中&#xff0c;定时任务的实现方式有单线程模型的 Timer 类、线程池定时任务的 ScheduleExecutorService、spring 框架提供的注解Schedule 定时任务&#xff0c;第三个框架定时任务比如 XX-Job,Quartz 等。 Java 任务调度组件对比与使用指南 一、核心功能对比 特…...

使用 OpenCV 实现哈哈镜效果

在计算机视觉和图像处理领域&#xff0c;OpenCV 提供了非常强大的图像几何变换能力&#xff0c;不仅可以用于纠正图像&#xff0c;还能制造各种“有趣”的视觉效果。今天&#xff0c;我们就来实现一个经典的“哈哈镜”效果&#xff0c;让图像像在游乐园里一样被拉伸、压缩、扭曲…...

【Java高阶面经:微服务篇】9.微服务高可用全攻略:从架构设计到自动容灾

一、架构层:构建抗故障的分布式基石 1.1 多维度冗余设计 1.1.1 跨可用区部署策略 # Kubernetes跨可用区反亲和性配置 apiVersion: apps/v1 kind: Deployment metadata:name: product-service spec:replicas: 3template:spec:affinity:podAntiAffinity:requiredDuringSchedu…...

读一本书第一遍是快读还是细读?

在时间充足且计划对重要书籍进行多遍阅读的前提下&#xff0c;第一遍阅读的策略可以结合**「快读搭建框架」与「标记重点」**&#xff0c;为后续细读奠定基础。以下是具体建议及操作逻辑&#xff1a; 一、第一遍&#xff1a;快读为主&#xff0c;目标是「建立全局认知」 1. 快…...

COMPUTEX 2025 | 广和通5G AI MiFi解决方案助力移动宽带终端迈向AI新未来

随着5G与AI不断融合&#xff0c;稳定高速、智能的移动网络已成为商务、旅行、户外作业等场景的刚需。广和通5G AI MiFi方案凭借领先技术与创新设计&#xff0c;重新定义5G移动网络体验。 广和通5G AI MiFi 方案搭载高通 4nm制程QCM4490平台&#xff0c;融合手机级超低功耗技术…...

JAVA批量发送邮件(含excel内容)

EmailSenderHtmlV1 是读取配置文件《批量发送邮件.xlsx》&#xff0c;配置sheet获取 发件人邮箱 邮箱账号 口令&#xff0c;发送excel数据sheet获取收件人邮箱 抄送人邮箱 邮件标题 第N行开始(N>1,N0默认表头) 第M行结束(M>1,M0默认表头) 附件文件夹…...

MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程

一、核心概念与适用场景 在 MyBatis 中,<association> 和 <collection> 用于处理对象间的关联关系,简化复杂查询到对象结构的映射。 标签用途对应关系示例场景<association>映射 单个嵌套对象(“有一个”关系)一对一、多对一员工 (Emp) 属于一个部门 (D…...

NSSCTF [watevrCTF 2019]Wat-sql

90.[watevrCTF 2019]Wat-sql(逻辑漏洞) [watevrCTF 2019]Wat-sql (1) 1.准备 motalymotaly-VMware-Virtual-Platform:~$ file sql sql: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linu…...

C++ 前缀和数组

一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组&#xff0c;计算从起始位置到每个位置的和&#xff0c;生成一个新的数组&#xff08;前缀和数组&#xff09;。利用该数组&#xff0c;可以快速计算任意区间的和&#xff0c;快速求出数组中某一段连续区间的和。 1.2. …...

免费使用GPU的探索笔记

多种有免费时长的平台 https://www.cnblogs.com/java-note/p/18760386 Kaggle免费使用GPU的探索 https://www.kaggle.com/ 注册Kaggle账号 访问Kaggle官网&#xff0c;使用邮箱注册账号。 发现gpu都是灰色的 返回home&#xff0c;右上角的头像点开 验证手机号 再次code-you…...

【css】 flex布局基本知识

Flexible Box 模型&#xff0c;是一种一维的布局模型。一个 flexbox 一次只能处理一个维度上的元素布局&#xff0c;一行或者一列。 轴线 flex 属性与主轴和交叉轴有关&#xff0c;通过flex-direction定义 主轴由 flex-direction 定义&#xff0c;可以取 4 个值&#xff1a;…...

3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解

SfM → Point-NeRF → 3D Gaussian Splatting &#x1f7e6;SfM Structure-from-Motion&#xff08;运动恢复结构&#xff0c;简称 SfM&#xff09;是一种计算机视觉技术&#xff0c;可以&#xff1a; 利用多张从不同角度拍摄的图像&#xff0c;恢复出场景的三维结构和相机的…...

RestTemplate 发送的字段第二个大写字母变成小写的问题探究

在使用RestTemplate 发送http 请求的时候&#xff0c;发现nDecisonVar 转换成了ndecisonVar ,但是打印日志用fastjson 打印的没有问题&#xff0c;换成jackson 打印就有问题。因为RestTemplate 默认使用的jackson 作为json 序列化方式&#xff0c;导致的问题&#xff0c;但是为…...

第二次中医知识问答微调

由于昨天微调效果并不理想&#xff0c;因此更换数据集和参数进行重新进行了微调 本次微调参数如下&#xff1a; llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /home/qhyz/zxy/LLaMA-Factory/model \ --preprocessing_num_workers 16 \ --…...

Linux查 ssh端口号和服务状态

一、检查SSH服务运行状态 通过进程查看命令验证服务是否启动&#xff1a; ps -ef | grep ssh当输出包含sshd进程时&#xff0c;表示SSH服务正在运行。示例输出&#xff1a; root 1234 1 0 10:00 ? 00:00:00 /usr/sbin/sshd二、查看服务监听端口 使用网络…...

C++ 11(1):

C11的发展史&#xff1a; C11中的{}&#xff1a; 看这个图片&#xff0c;我们的C11是所有的对象都可以使用{}来进行初始化&#xff0c;之前我们的int类型的数据要使用赋值符号来进行初始化&#xff0c;现在的话我们可以直接使用花括号来进行&#xff0c;并且连赋值符号都可以去…...

数据结构(4)线性表-链表-双链表

一、链表的分类 迟来的分类&#xff0c;主要如果在学习单链表前去讲分类&#xff0c;可能就云里雾里的&#xff0c;所以放在讲完单链表后讲。 划分链表的标准如下&#xff1a; 有没有头结点、指针的方向、循环与否 头结点就是一个占位结点&#xff0c;也被叫做哨兵位&#x…...

Spring Framework 的 spring-core 和 Spring Security 兼容版本

Spring Framework 的 spring-core 和 Spring Security 兼容版本 Spring Framework 的 spring-core 和 Spring Security 的版本需要保持兼容性&#xff0c;尤其是在旧版本&#xff08;如 Spring 4.x&#xff09;中。以下是它们的版本对应关系&#xff1a; Spring 4.x (spring-c…...

《国家职业教育平台:点亮职业教育新灯塔》

职教新航标&#xff1a;平台诞生记 国家职业教育智慧教育平台 在科技飞速发展的今天&#xff0c;数字化浪潮席卷全球&#xff0c;深刻地改变着我们生活的方方面面&#xff0c;教育领域也不例外。随着信息技术的不断进步&#xff0c;教育数字化已成为当今世界教育发展的重要趋势…...

Java多线程深度解析:从核心机制到高阶实战

Java多线程深度解析&#xff1a;从核心机制到高阶实战 摘要&#xff1a;本文系统解析Java多线程全体系知识&#xff0c;涵盖线程实现原理、并发工具实战、锁机制底层实现、线程池参数调优策略&#xff0c;并提供20可运行代码片段。附内存模型原理与性能优化指南。 目录 线程基…...

大量程粗糙度轮廓仪适用于哪些材质和表面?

大量程粗糙度轮廓仪是一种能够在广泛的测量范围内对工件表面进行粗糙度分析的精密仪器。它通常采用接触式或非接触式传感器&#xff0c;通过对工件表面的扫描&#xff0c;捕捉表面微观的起伏和波动&#xff0c;从而获取粗糙度数据。该仪器不仅能测量微小的表面细节&#xff0c;…...

NC028NQ472美光固态颗粒NQ484NQ485

深度解析&#xff1a;NC028NQ472、NQ484与NQ485美光固态颗粒 技术架构解析&#xff1a;堆叠式存储与算法优化 美光NC028NQ472、NQ484及NQ485系列固态颗粒均采用自研3D TLC NAND闪存技术&#xff0c;其核心架构通过垂直堆叠存储单元实现高密度集成。以NQ472为例&#xff0c;采…...

Cursor神一样的存在,核心能力codebase是如何工作的?

最近宣布达到 3 亿美元年度经常性收入&#xff0c;已经成为vibe coding标配。核心能力来自于Codebase。根据官方说法&#xff0c;codebase实现是依赖使用 Merkle 树来快速索引代码。但是没有竞品模仿这种方法。 Merkle是如何工作的那&#xff1f; Merkle 树简单解释 Merkle …...

python代码绘制某只股票最近90天的K线图、均线、量能图

运行代码&#xff0c;要求输入股票代码和名称&#xff0c;其他参数可省略 import akshare as ak import matplotlib.pyplot as plt import pandas as pd import mplfinance as mpf import matplotlib.dates as mdates import numpy as np import os from datetime import date…...

upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)

目录 一、图片马 二、文件包含 三、文件包含与图片马 四、图片马制作方法 五、源码分析 六、制作图片马 1、创建脚本并命名为test.php 2、准备制作图片马的三类图片 3、 使用copy命令制作图片马 七、渗透实战 1、GIF图片马渗透 &#xff08;1&#xff09;上传gif图…...

反弹shell

shell了解 shell其xxxx是交互&#xff0c;点鼠标敲键盘与计算机进行交互&#xff0c;还有常见的shell&#xff08;cmd&#xff0c;powershell&#xff09; shell反弹 当远程连接shell&#xff08;windows远程桌面&#xff0c;linux有SSH之类&#xff09;&#xff0c;从外面远…...

【动手学深度学习】1.3. 各种机器学习问题

目录 1.3. 各种机器学习问题1&#xff09;监督学习&#xff08;supervisedlearning&#xff09;&#xff08;1&#xff09;回归&#xff08;regression&#xff09;&#xff08;2&#xff09;分类&#xff08;classification&#xff09;&#xff08;3&#xff09;标记问题&…...

OS进程调度

tss Q1&#xff1a;你是如何保证两个进程不能同时访问共享资源的&#xff1f; ✅ 推荐回答&#xff1a; 我实现了基于结构体的互斥锁&#xff0c;使用 mutex_lock() 来加锁资源。如果已有任务持有锁&#xff0c;则当前任务会被阻塞并加入等待队列&#xff0c;直到被唤醒。解锁…...

MCP和 AI agent 有什么区别和联系

MCP 是什么&#xff1f; MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是一种开源通信协议&#xff0c;旨在为大型语言模型&#xff08;LLM&#xff09;与外部数据源、工具或服务之间建立标准化、安全且灵活的双向连接。它类似于“AI 的 USB-…...

用Recommenders,实现个性化推荐

文章目录 引言一、Recommenders简介二、选择Recommenders的原因三、智能推荐系统的设计与实现四、总结 引言 在这个信息如洪流般涌来的时代&#xff0c;你是否常常在茫茫的信息海洋中迷失方向&#xff0c;为找不到自己心仪的内容而苦恼&#xff1f;今天咱们就来聊聊基于Micros…...

MCP-1:MCP组件与工作流程

MCP-1:MCP组件与工作流程 1.什么是MCP2.MCP架构组件​​2.1.MCP Hosts2.2.MCP Client​​2.3.MCP Server3.交互流程3.1.用户提问3.2.LLM 推理选择MCP Server(大模型规划)3.3.调用 MCP Tool3.4.返回结果3.5.数据清洗3.6.反馈信息给用户1.什么是MCP MCP(Model Context Proto…...

NVIDIA GPU 性能调优与诊断完全指南

本文为多 GPU 用户&#xff08;如 3*RTX A4000 系统&#xff09;提供一份全面的调优与诊断手册&#xff0c;涵盖功率限制、风扇控制、频率锁定、缓存清理、GPU 重置与性能测试工具等操作命令&#xff0c;适合开发者与研究人员在部署前进行系统级优化与验证。 &#x1f4cc; 目录…...

从运维告警到业务决策:可观测性正在重新定义企业数据基础设施

可观测性&#xff08;Observability&#xff09;与传统监控&#xff08;Monitoring&#xff09;的核心差异&#xff0c;本质上是一种数据维度的主动暴露与被动采集的范式转变。传统监控就像在黑暗森林中设置有限的探照灯&#xff0c;运维人员必须预先假设可能的故障路径&#x…...