[Rails] 我们如何将API响应渲染时间减少30%

[Rails] 我们如何将API响应渲染时间减少30%

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

我们在支持17万用户的SNS后端团队中,使用Jbuilder生成API响应。通过使用props_template替代部分渲染,平均渲染时间从289.02ms降至151.34ms,性能提升了30%。

🎯

关键要点

  • 支持17万用户的SNS后端团队使用Jbuilder生成API响应。
  • 通过使用props_template替代部分渲染,平均渲染时间从289.02ms降至151.34ms,性能提升了30%。
  • Jbuilder是Ruby on Rails中用于生成JSON响应的领域特定语言。
  • 在应用中,构建单个响应负载通常涉及调用20到30个部分文件,部分文件的渲染时间可达500ms。
  • 使用New Relic分析发现,部分渲染占用了API响应时间的最大部分。
  • 调查发现partial!方法的性能问题,render方法和文件查找过程是导致渲染性能下降的关键因素。
  • 将操作从部分文件直接移入调用者,平均渲染时间减少了42.5%。
  • 考虑到维护性,减少partial!方法调用并不是一个实际的解决方案。
  • props_template是一个轻量级快速生成JSON的库,语法与Jbuilder相似。
  • 使用props_template的部分渲染可以通过带键和不带键的两种方式进行。
  • 将Jbuilder替换为props_template后,平均渲染时间减少了47.6%。
  • 在生产环境中,渲染时间改善了约30%,95百分位响应时间从2.11s降至1.57s,改善约26%。
  • 未来计划在其他API中应用类似的改进,并继续优化数据结构、SQL索引、缓存等领域。

延伸问答

如何通过使用props_template减少API响应的渲染时间?

使用props_template替代部分渲染,平均渲染时间从289.02ms降至151.34ms,性能提升了47.6%。

Jbuilder是什么,它在API响应中有什么作用?

Jbuilder是Ruby on Rails中用于生成JSON响应的领域特定语言,允许开发者直观地构建JSON响应。

在渲染API响应时,部分渲染占用了多少时间?

部分渲染占用了API响应时间的最大部分,导致性能下降。

使用New Relic分析API性能时发现了什么问题?

分析发现,部分渲染和SQL执行占用了大部分的响应时间,特别是部分渲染的性能问题。

在生产环境中,渲染时间改善了多少?

在生产环境中,渲染时间改善了约30%,95百分位响应时间从2.11s降至1.57s,改善约26%。

未来对API的优化计划是什么?

未来计划在其他API中应用类似的改进,并继续优化数据结构、SQL索引、缓存等领域。

➡️

继续阅读