Tef*_*Ted 5 performance activerecord preloader
使用大量外围对象执行大型activerecord查询.
添加".includes"(预加载)可以通过挤压所有N + 1来大大加快速度.
然后页面快速呈现并将其吐出到日志中:
Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms)
Run Code Online (Sandbox Code Playgroud)
然而,它是*90 SECONDS*直到页面实际发送到浏览器(或curl;我们已经测试了两者).
在此期间,ruby进程的CPU固定为100%.
如果我们删除".includes"(预加载),它会恢复正常的糟糕表现,而不会在页面渲染和浏览器传递之间出现一点半的虚无.
WTF做预加载导致效果!?
一位同事假设垃圾收集问题; 我该如何测试这个理论呢?
Rails 3.2.12
Ruby 1.9.3(p286和p327测试)
发现问题;这是 Bullet gem(https://github.com/flyerhzm/bullet)。
这个 gem 巧妙地查找并报告 N+1 查询和过度包含,但在结果集非常大的情况下,它会大大降低应用程序性能。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |