rig*_*gyt 3 ruby-on-rails eager-loading rails-bullet
我添加了项目符号 gem来建议我开发中的任何 N+1 查询(Rails 4.0.2),它建议急切地加载模型的两个父关联,在其中显示其所有记录。
在急切加载这些所属关联之一之前:
Completed 200 OK in 5252ms (Views: 1.8ms | ActiveRecord: 114.1ms)
Run Code Online (Sandbox Code Playgroud)
急切加载后:
Completed 200 OK in 6741ms (Views: 2.1ms | ActiveRecord: 146.0ms)
Run Code Online (Sandbox Code Playgroud)
此外,通过急切加载,浏览器会在控制台显示已完成后挂起,并且在一段时间内(大约 6 秒)不会更新。服务器生产没有这种冻结问题,但在这种情况下,急切加载仍然是一个糟糕的建议。
急切加载会变慢是否有意义?该视图确实访问(预先加载的)父记录。
此外,由于某种原因,子弹宝石不显示调用堆栈。
此外,通过急切加载,浏览器会在控制台显示已完成后挂起,并且在一段时间内(大约 6 秒)不会更新。
正如我今天发现的,这可能是 Bullet 本身造成的。原因是它插入了一个中间件,该中间件必须在浏览器接收页面之前遍历并分析您的查询。因此,可以想象,查询中的任何变化都可能会影响 Bullet 执行任务的速度。
通过删除我的一个应用程序中的 Bullet,我消除了一个慢速页面上的额外延迟,并将实际报告的渲染时间减少了一整秒。
因此,当您进行比较时,请在禁用 Bullet 的情况下进行比较(在您的配置中或通过暂时从 Gemfile 中删除并运行bundle)。它仍然是一个有价值的工具,但显然对于某些应用程序来说,仅在您尝试优化事物时定期启用它可能是一个好主意。
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |