【前端】性能优化篇

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

目录

性能优化

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

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

  • 为什么性能优化
  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状态 和 加载完成标识)
    使用 缓存策略 保存滚动位置 / 数据
    移动端适配:下拉刷新 + 上拉加载
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端