首页
/ Expensify/App 报告页面性能优化实践

Expensify/App 报告页面性能优化实践

2025-06-15 03:37:53作者:毕习沙Eudora

问题背景

在Expensify/App项目的v9.1.56-1版本中,测试团队发现了一个严重的性能问题:在测试环境(staging)中,报告页面(Reports page)的加载、滚动和导航操作变得异常缓慢。这个问题主要影响拥有大量报告数据的用户,在MacOS的Chrome和Safari浏览器上表现尤为明显。

问题现象

用户在执行以下操作时会遇到明显的卡顿:

  1. 进入费用报告(Expense Reports)页面
  2. 点击查看具体报告详情
  3. 在报告详情页中滚动内容
  4. 返回报告列表页
  5. 在列表页中滚动浏览
  6. 再次点击进入其他报告

技术分析

经过开发团队调查,发现问题主要由以下几个因素导致:

  1. 重复API调用:系统在用户交互过程中频繁调用Search API,造成了不必要的网络请求和数据处理开销。

  2. 渲染性能瓶颈:页面采用了FlashList组件进行渲染,虽然FlashList理论上能提供更好的性能,但在实际实现中可能没有正确配置或优化,导致滚动时的帧率下降。

  3. 大数据量处理:对于拥有大量报告数据的账户,前端没有做好数据分页或虚拟滚动处理,导致浏览器需要同时处理过多DOM元素。

解决方案

开发团队采取了以下措施解决问题:

  1. 紧急回滚:首先回滚了引入问题的变更,确保生产环境的稳定性。这是通过PR#63331实现的。

  2. 性能优化计划:计划对FlashList实现进行重构(v2版本),重点解决滚动性能问题。

  3. API调用优化:减少不必要的Search API调用,可能通过以下方式实现:

    • 增加请求去重
    • 实现更智能的数据缓存策略
    • 优化请求触发条件

经验总结

这个案例为我们提供了几个重要的经验教训:

  1. 性能测试的重要性:新功能在发布前需要针对大数据量场景进行充分的性能测试。

  2. 渐进式改进:对于核心页面组件的重构(如列表渲染)应该采用渐进式策略,确保有回滚方案。

  3. 监控机制:建立完善的性能监控机制,能够及时发现生产环境中的性能退化问题。

  4. 跨平台考量:性能问题往往在不同平台表现不一,需要全面的跨平台测试。

未来优化方向

团队计划从以下几个方面进一步优化报告页面的性能:

  1. 虚拟滚动优化:实现更高效的虚拟滚动方案,减少DOM节点数量。

  2. 数据分片加载:采用无限滚动或分页加载技术,避免一次性加载过多数据。

  3. 内存管理:优化前端数据缓存策略,平衡内存使用和性能需求。

  4. 渲染性能分析:使用性能分析工具定位具体的渲染瓶颈点。

这个案例展示了在现代Web应用中处理性能问题的典型流程,从问题发现、紧急修复到长期优化方案的制定,为类似场景提供了有价值的参考。

登录后查看全文
热门项目推荐

项目优选

收起
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
136
187
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
881
521
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
361
381
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
181
264
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.09 K
0
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
613
60
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
118
78