【前端】性能优化篇

长期更新,建议关注收藏点赞。

目录

性能优化

本文仅是列出常见的前端性能指标和优秀数值范围,具体的指标和数值应根据项目需求、用户体验要求、业务规模等因素来确定。

前端性能优化也不是一次性的任务,需要持续关注和优化。

  • 为什么性能优化
  1. 提高用户体验:提高网页的加载速度和响应速度,减少网页的加载时间,提高用户的满意度和体验。
  2. 增加页面的访问量:网站的性能越好,越增加页面的访问量,提高网站的流量。
  3. 提高搜索引擎排名:搜索引擎对网站的性能和速度有评价标准,页面加载速度越快,搜索引擎评价越高,网站排名越高。
  4. 减少服务器压力:减少网络传输量、请求次数等,提高整个应用程序的性能和稳定性。
  5. 节约成本:减少服务器的硬件配置和维护成本,提高经济效益。
  6. 提高用户留存率
  • 前端性能好坏判断
    • 性能优化2-5-8原则
      2:页面的加载时间应该控制在2秒以内,这是用户能够接受的最短时间。
      5:页面的加载时间在5秒以内,用户对页面加载速度的不满意度开始上升。
      8:页面的加载时间超过8秒,用户的流失率急剧增加,很可能放弃访问。
    • RAIL
      RAIL是一个衡量前端性能的指标,由Google提出,包括以下四个方面:
      响应(Response):在100毫秒内完成用户操作的响应时间,以保证用户感觉流畅。
      动画(Animation):动画在每秒60帧以上时,才能保证流畅自然,最高可达每秒120帧。
      空闲(Idle):在空闲时间内处理非关键性任务,如预取资源、预渲染等,以加速后续操作。
      负载(Load):在5秒内加载并渲染主要内容,确保用户不会因等待时间而失去兴趣。

具体指标

  • 页面加载时间(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) 指的是:用户滚动到底部时,自动加载下一批数据,而不是一次性加载所有内容。
  1. 监听滚动事件(scroll):判断是否接近底部(如:滚动距离 + 视口高度 >= 滚动总高度 - 阈值);触发数据请求(AJAX / fetch),将新数据 append 到页面
js 复制代码
window.addEventListener('scroll', () => {
  const scrollTop = window.scrollY;
  const clientHeight = document.documentElement.clientHeight;
  const scrollHeight = document.documentElement.scrollHeight;

  if (scrollTop + clientHeight >= scrollHeight - 100) {
    loadMoreData(); // 拉取下一页
  }
});
  1. 数据量有一亿条的优化
    核心优化策略:分页 + 虚拟滚动
  • 分页加载(后端配合)
    前端每次请求一页(如每页 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
    优点:高性能、不重复、不漏数据,适合大数据量场景
  1. 懒加载图片、懒渲染组件
    图片、复杂组件使用懒加载(<img loading="lazy"> 或 IntersectionObserver
    避免首次加载压力
  2. 避免全量存入内存
    只缓存部分数据(如当前页、前后页),其余可丢弃节省内存。
  3. 补充
    使用 节流 / 防抖 避免频繁触发加载(配合显示Loading状态 和 加载完成标识)
    使用 缓存策略 保存滚动位置 / 数据
    移动端适配:下拉刷新 + 上拉加载
相关推荐
子兮曰3 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭3 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路6 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒7 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol8 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉8 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau8 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生8 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼8 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君879978 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter