3

我添加了子弹 gem来建议我在 dev (Rails 4.0.2) 中的任何 N+1 查询它建议急切加载我正在显示其所有记录的模型的两个父关联。

在急切加载这些所属关联之一之前:

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

急切加载后:

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

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

急切加载可能会变慢是否有意义?该视图确实访问(急切加载的)父记录。

此外,由于某种原因,子弹 gem 不显示调用堆栈。

4

1 回答 1

3

此外,通过预先加载,浏览器会在控制台显示完成并且一段时间(大约 6 秒)没有更新后挂起。

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

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

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

于 2014-10-03T05:34:56.780 回答