【前端】性能优化篇
长期更新,建议关注收藏点赞。
目录
- 性能优化
- 具体指标
- 监控工具/系统
- 解决方案
- html
- css
- js
- vue
- react
- 包体积
- 静态资源
- 图片优化
- 白屏
- 首屏加载速度
- 缓存优化
- 网络优化
- web worker
- 动画
- 面试题汇总
- 怎么实现无限加载,如果有一亿条数据怎么优化
性能优化
本文仅是列出常见的前端性能指标和优秀数值范围,具体的指标和数值应根据项目需求、用户体验要求、业务规模等因素来确定。
前端性能优化也不是一次性的任务,需要持续关注和优化。
- 为什么性能优化
- 提高用户体验:提高网页的加载速度和响应速度,减少网页的加载时间,提高用户的满意度和体验。
- 增加页面的访问量:网站的性能越好,越增加页面的访问量,提高网站的流量。
- 提高搜索引擎排名:搜索引擎对网站的性能和速度有评价标准,页面加载速度越快,搜索引擎评价越高,网站排名越高。
- 减少服务器压力:减少网络传输量、请求次数等,提高整个应用程序的性能和稳定性。
- 节约成本:减少服务器的硬件配置和维护成本,提高经济效益。
- 提高用户留存率
- 前端性能好坏判断
- 性能优化2-5-8原则
2:页面的加载时间应该控制在2秒以内,这是用户能够接受的最短时间。
5:页面的加载时间在5秒以内,用户对页面加载速度的不满意度开始上升。
8:页面的加载时间超过8秒,用户的流失率急剧增加,很可能放弃访问。 - RAIL
RAIL是一个衡量前端性能的指标,由Google提出,包括以下四个方面:
响应(Response):在100毫秒内完成用户操作的响应时间,以保证用户感觉流畅。
动画(Animation):动画在每秒60帧以上时,才能保证流畅自然,最高可达每秒120帧。
空闲(Idle):在空闲时间内处理非关键性任务,如预取资源、预渲染等,以加速后续操作。
负载(Load):在5秒内加载并渲染主要内容,确保用户不会因等待时间而失去兴趣。
- 性能优化2-5-8原则
具体指标
- 页面加载时间(Page Load Time):页面从开始加载到加载完毕所需的时间,包括页面资源加载时间和页面渲染时间。越短越好,应控制在 2-3 秒内。
- 首屏加载时间(First Contentful Paint):页面第一次渲染任何可见内容所需时间。是用户感知页面加载速度的第一时间节点,应控制在 2 秒内。
- 用户可交互时间(Time to Interactive):页面从开始加载到可以响应用户交互的时间。在该指标达到之前,用户不能进行任何操作。用户可交互时间应控制在 5 秒内。
- 白屏时间(White Screen Time):用户打开网页到页面开始渲染第一像素的时间。越短越好,控制在 1 秒内。
- 资源文件大小(Resource Size):页面所需的所有资源文件(HTML、CSS、JS、图片等)总大小。资源文件大小应控制在 500KB 内,过大的资源文件会影响页面加载速度和用户体验。
监控工具/系统
- 如何通过指标定位问题
解决方案
html
css
js
vue
react
包体积
静态资源
图片优化
白屏
首屏加载速度
缓存优化
网络优化
web worker
动画
面试题汇总
怎么实现无限加载,如果有一亿条数据怎么优化
考察的点有:
监听滚动事件
虚拟滚动(Virtual Scroll / Windowing)
懒加载
分页加载(Lazy loading),后端配合,(升级版游标分页)
前端性能优化意识
- 无限加载(Infinite Scroll) 指的是:用户滚动到底部时,自动加载下一批数据,而不是一次性加载所有内容。
- 监听滚动事件(scroll):判断是否接近底部(如:滚动距离 + 视口高度 >= 滚动总高度 - 阈值);触发数据请求(AJAX / fetch),将新数据 append 到页面
window.addEventListener('scroll', () => {const scrollTop = window.scrollY;const clientHeight = document.documentElement.clientHeight;const scrollHeight = document.documentElement.scrollHeight;if (scrollTop + clientHeight >= scrollHeight - 100) {loadMoreData(); // 拉取下一页}
});
- 数据量有一亿条的优化
核心优化策略:分页 + 虚拟滚动
- 分页加载(后端配合)
前端每次请求一页(如每页 50 条)
URL 示例:/api/list?page=2&limit=50
后端返回:分页数据 + 是否还有下一页
优点:减少网络传输、避免一次加载太多 - 虚拟滚动 / 虚拟列表(Virtual Scrolling)
虚拟滚动是只渲染可视区域内的 DOM 元素,其它的只占位不渲染,极大提高性能。滚动时按需更新渲染区域
实现方式:
自己实现 scroll 监听 + DOM 占位
使用现成组件库
框架 | 虚拟列表库 |
---|---|
React | react-window , react-virtual |
Vue | vue-virtual-scroller |
- 后端支持游标分页(cursor pagination)
传统分页(page=1,2,3)到后期效率低。改为:每次记录当前返回列表的最后一个 ID 或时间戳(cursor)下次请求:/api/list?after=last_id
优点:高性能、不重复、不漏数据,适合大数据量场景
- 懒加载图片、懒渲染组件
图片、复杂组件使用懒加载(<img loading="lazy"> 或 IntersectionObserver
)
避免首次加载压力 - 避免全量存入内存
只缓存部分数据(如当前页、前后页),其余可丢弃节省内存。 - 补充
使用 节流 / 防抖 避免频繁触发加载(配合显示Loading状态 和 加载完成标识)
使用 缓存策略 保存滚动位置 / 数据
移动端适配:下拉刷新 + 上拉加载
相关文章:
【前端】性能优化篇
长期更新,建议关注收藏点赞。 目录 性能优化具体指标监控工具/系统解决方案htmlcssjsvuereact包体积静态资源图片优化白屏首屏加载速度缓存优化网络优化web worker动画 面试题汇总怎么实现无限加载,如果有一亿条数据怎么优化 性能优化 本文仅是列出常见…...
【redis实战篇】第六天
摘要: 本文介绍了基于Redis的秒杀系统优化方案,主要包含两部分:1)通过Lua脚本校验用户秒杀资格,结合Java异步处理订单提升性能;2)使用Redis Stream实现消息队列处理订单。方案采用Lua脚本保证库…...

力扣题解654:最大二叉树
一、题目内容 题目要求根据一个不重复的整数数组 nums 构建最大二叉树。最大二叉树的构建规则如下: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回由 nums 构…...
手写ArrayList和LinkedList
项目仓库:https://gitee.com/bossDuy/hand-tear-collection-series 基于b站up生生大佬:https://www.bilibili.com/video/BV1Kp5tzGEc5/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 LinkedList package com…...
Android bindservice绑定服务,bindServiceAsUser补充
Android bindservice绑定服务,并同步返回service对象的两个方法-CSDN博客 补充反射并调用bindServiceAsUser的方法: private boolean initService2(final Context context){if(deviceServicenull){latch new CountDownLatch(1);HandlerThread handler…...
[蓝桥杯]交换次数
交换次数 题目描述 IT 产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称 BAT )在某海滩进行招聘活动。 招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:BABTATT,这使…...

95套HTML高端大数据可视化大屏源码分享
概述 在大数据时代,数据可视化已成为各行各业的重要需求。这里精心整理了95套高端HTML大数据可视化大屏源码,这些资源采用现代化设计风格,可帮助开发者快速构建专业的数据展示界面。 主要内容 1. 设计风格与特点 采用…...
系统架构设计综合知识与案例分析
system-architect 软考高级-系统架构设计师-综合知识与案例分析:软件工程、网络工程、结构化分析方法、面向对象分析方法、软件质量数量、传统数据库、分布式数据库、系统架构等。 —— 2025 年 3 月 20 日 甲辰年二月二十一 春分 目录 system-architect1、计算机基…...

scale up 不能优化 TCP 聚合性能
scale up 作为一种系统扩展优化的方法,旨在提高系统组件的执行效率,比如替换更高性能的硬件或算法。是否可以此为依据优化 TCP 呢,例如通过多条路径聚合带宽实现吞吐优化(对,还是那个 MPTCP),答案是否定的。 因为 TCP…...

Python-matplotlib库之核心对象
matplotlib库之核心对象 FigureFigure作用Figure常用属性Figure常用方法Figure对象的创建隐式创建(通过 pyplot)显式创建使用subplots()一次性创建 Figure 和 Axes Axes(绘图区)Axes创建方式Axes基本绘图功能Axes绘图的常用参数Ax…...

Linux 脚本文件编辑(vim)
1. 用户级配置文件(~/.bashrc) vim ~/.bashrc # 编辑 source ~/.bashrc # 让编辑生效 ~/.bashrc 文件是 Bash Shell 的配置文件,用于定义用户登录时的环境变量、别名、函数等设置。当你修改了 ~/.bashrc 文件后,通常需要重新…...

学习BI---基本操作---数据集操作
什么是数据集, 数据集(Dataset) 是指从原始数据源(如数据库、Excel、API等)提取并经过标准化处理后的数据集合,通常以二维表形式存储,用于支撑报表、仪表盘等可视化分析。 数据集在QuickB…...

初学大模型部署以及案例应用(windows+wsl+dify+mysql+Ollama+Xinference)
大模型部署以及案例应用(windowswsldifymysqlOllamaXinference) 1.wsl 安装①安装wsl②测试以及更新③安装Ubuntu系统查看系统以及版本安装Ubuntu系统进入Ubuntu系统 2、docker安装①下载安装包②安装③docker配置 3、安装dify①下载dify②安装③生成.en…...
AI Agent企业级生产应用全解析
在企业级应用中,AI Agent 的核心是将其从一个对话模型转变为一个自主决策和执行的自动化工作流引擎。这需要一个精密的 “Agent 执行框架”(Agent Orchestration Framework) 来协调 LLM 的推理、外部工具的调用、记忆管理和自我反思。 AI Ag…...
RocketMQ 学习
消息队列 参考官方文档:https://rocketmq.apache.org/zh/docs/ 基本概念 主题(Topic):是消息传输和消息存储的顶级容器,不是实际的消息容器,而是一个逻辑上的概念,用于区分不同业务消息的标识&…...
【前端】html2pdf实现用前端下载pdf
npm安装完后,编写代码。 <template><div id"pdf-content">需要被捕获为pdf的内容</div> </template><script> import html2pdf from html2pdf.js;export default {methods: {downloadPdf() {const element document.getE…...

Redis部署架构详解:原理、场景与最佳实践
Redis部署架构详解:原理、场景与最佳实践 Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式&a…...
前端开发知识体系全景指南
文章目录 前言前端开发者知识体系清单一、JavaScript基础变量和类型原型和原型链作用域和闭包执行机制语法和API 二、HTML和CSSHTMLCSS手写 三、计算机基础编译原理网络协议设计模式 四、数据结构和算法JavaScript编码能力手动实现前端轮子数据结构算法 五、运行环境浏览器API浏…...

C++哈希表:unordered系列容器详解
本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红…...
vue-13(延迟加载路由)
用于性能优化的延迟加载路由 延迟加载路由是优化 Vue.js 应用程序性能的关键技术,尤其是那些具有大量路由的应用程序。通过仅在实际需要时加载路由组件,您可以显著减少应用程序的初始加载时间,从而获得更好的用户体验。这对于网络连接速度较…...
pom.xml 文件中配置你项目中的外部 jar 包打包方式
使用 system 作用域(不推荐,但简单直接) <dependency><groupId>com.test</groupId> <!-- 可自定义,建议与项目相关 --><artifactId>open-sdk</artifactId> <!-- 可自定义,建议…...

WordPress通过简码插入bilibili视频
发布于:Eucalyptus-Blog 一、前言 B站是国内非常受欢迎的视频分享平台,上面不仅内容丰富,而且很多视频制作精良、趣味十足。很多人,比如我,就喜欢将B站的视频通过 iframe 嵌入到自己的网页中,但这段代码又…...

ZLG ZCANPro,ECU刷新,bug分享
文章目录 摘要 📋问题的起因bug分享 ✨思考&反思 🤔摘要 📋 ZCANPro想必大家都不陌生,买ZLG的CAN卡,必须要用的上位机软件。在汽车行业中,有ECU软件升级的需求,通常都通过UDS协议实现程序的更新,满足UDS升级的上位机要么自己开发,要么用CANoe或者VFlash,最近…...

黑马k8s(十七)
一:高级存储 1.高级存储-pv和pvc介绍 2.高级存储-pv 3.高级存储-pvc 最后一个改成5gi pvc3是没有来绑定成功的 pv3没有绑定 删除pod、和pvc,观察状态: 4.高级存储-pc和pvc的生命周期 二:配置存储 1.配置存储-ConfigMap 2.配…...

掌握HttpClient技术:从基础到实战(Apache)
目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传(Multipart) 总结 前言 …...
KEYSIGHT N9320B是德科技N9320B频谱分析仪
KEYSIGHT N9320B是德科技N9320B频谱分析仪 附加功能: 频率范围:9 kHz 至 3 GHz 分辨率带宽:10 Hz 至 1 MHz DANL:-130 dBm,-148 dBm,带可选前置放大器 整体幅度精度:<1.5 dB 最小非零扫…...
EXSI通过笔记本wifi上外网配置
我有一台服务器安装了EXSI,服务器IP地址配置的是192.168.137.2,在EXSI中创建了一个linux虚拟机,ip地址是192.168.137.22。现在我有一个windows笔记本,使用家庭的wife上外网,wife给自动分配了一个192.168.0.106地址&…...
Java异常处理的全面指南
Java异常处理的全面指南 一、Java异常的基础概念1.1 什么是异常1.2 异常类的层次结构 二、Java异常的处理方式2.1 try-catch块2.2 throws关键字2.3 throw关键字 三、自定义异常3.1 自定义受检异常3.2 自定义非受检异常 四、Java异常处理的最佳实践4.1 捕获合适粒度的异常4.2 避…...

sql知识梳理(超全,超详细,自用)
目录 通识 查询的基本语法 数据库(database)操作 表(table)的操作 表中列的操作 索引操作 表中行的操作 insert into语句 update语句 删除语句 select语句 表与表之间的关系 连接查询 子查询 视图 数据备份与还原 …...

[ Qt ] | QPushButton常见用法
目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…...