angus
(Angus McLeod)
1
我最近一直在关注 ActivityPub 插件 的性能,并考虑如何可靠地测试和证明该项目性能的最佳方法。以下是一些初步的背景信息:
- 该插件是一个开源项目,涉及多个方(即拥有该插件的 Discourse,以及目前正在构建它的 Pavilion)。
- 不同方可能有不同的内部性能测试工具/系统。
- 多方参与的开源项目受益于通用的测试方法,以验证其是否可靠运行,或者在此情况下,是否可靠地执行。
- Discourse(值得称赞的是)非常关注性能。
在 Discourse,我们认为性能是一种特性。我们欢迎能改进客户端或服务器端性能的拉取请求。
- 目前,据我所知,在 Discourse 中唯一通用的服务器端性能测试/证明方法是
track_sql_queries(通常(但不限于)用于请求测试)。
- 虽然查询计数是性能的一个指标,但它不是唯一的指标(有些查询比其他查询更耗时)。
有关 track_sql_queries 用法的近期示例,请参阅:
如果您熟悉这个领域,您可能知道类似这样的说法:
经验法则是单元测试需要速度,而性能测试需要时间。
(引自这个不错的解释)
这似乎使得(除了查询计数之外的)性能测试难以集成到 rspec(或类似)套件中。不过,有些人尝试过:
我想了解大家是否有其他实用的方法、建议或想法,可以在 Discourse 生态系统中添加更多通用的性能测试和性能证明。或者是否有我在此未提及的方法或途径。我想强调“实用”和“通用”这两个词。
我想到的一种可能性是,可以在 spec 中使用 MiniProfiler,例如 Rack::MiniProfiler.profile_singleton_method。但我既没有尝试过,也不知道这是否是个好主意。
7 个赞
sam
(Sam Saffron)
2
我的总体建议是避免在 spec 中进行性能测试。
我们有一些在 spec 中尝试监控 N+1 的示例,但它们都相当脆弱。
这是一个非常非常棘手的问题,没有明显的解决方案,所有解决方案都有折衷,所以我们通常会避免这样做,而只是在生产环境中监控这类问题。
1 个赞