ruby-on-rails - 按照建议添加急切负载后,Rails bullet gem 变慢

标签 ruby-on-rails eager-loading rails-bullet

我添加了 bullet gem告诉我开发中的任何 N+1 个查询(Rails 4.0.2) 它建议预先加载我正在显示其所有记录的模型的两个父关联。

在急切加载其中一个属于关联之前:

Completed 200 OK in 5252ms (Views: 1.8ms | ActiveRecord: 114.1ms)

预加载后:

Completed 200 OK in 6741ms (Views: 2.1ms | ActiveRecord: 146.0ms)

此外,在预先加载的情况下,浏览器会在控制台显示完成后挂起并且不会更新一段时间(大约 6 秒)。服务器生产没有这个卡住问题,但在这种情况下,预加载似乎仍然是一个坏建议。

预加载速度变慢有意义吗?该 View 确实访问(急切加载的)父记录。

此外,由于某些原因,bullet gem 不显示调用堆栈。

最佳答案

Also, with eager loading, the browser hangs after the console says completed and doesn't updated for an age (about 6 seconds).

我今天发现,这可能是 Bullet 本身造成的。原因是因为它插入了一个中间件,它必须在浏览器接收页面之前通过并分析您的查询。因此可以想象,您查询中的任何更改都可能影响 Bullet 执行操作的速度。

通过在我的一个应用程序中删除 Bullet,我摆脱了一个慢速页面上的额外延迟,并且还减少了整整一秒的实际报告渲染时间。

因此,当您进行比较时,请在禁用 Bullet 的情况下进行(在您的配置中或通过暂时从 Gemfile 中删除并运行 bundle)。它仍然是一个有值(value)的工具,但显然对于某些应用程序来说,只在您尝试优化时定期启用它可能是个好主意。

关于ruby-on-rails - 按照建议添加急切负载后,Rails bullet gem 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539211/

相关文章:

ruby-on-rails-3 - 使用 gem "declarative_authorization"修复 "bullet"gem 中的 N+1 查询

ruby-on-rails - Ruby on Rails - Bullet/N+1

ruby-on-rails - NoMethodError:Roo::CSV:Class 未定义方法 `generate'

ruby-on-rails - Rails 3 + 异常通知程序 gem : How to set up Exception Notifier site-wide?

mysql - 如何延迟加载或急切加载关联表的总和?

mysql - acts_as_api 和项目符号 N+1 查询

ruby-on-rails - Rails 计数器缓存

ruby-on-rails - rails : Nesting resources more than 1 level deep

entity-framework - 使用 Entity Framework 数据注释通过预加载实现一对多关系

grails - Grails GORM域类关系