non*_*ame 4 ruby rspec ruby-on-rails rails-bullet
使用Bullet Gem和RSpec的有效方法是什么?现在我觉得如果我将它与我当前的单元测试框架一起使用,我会得到很多通知或测试失败,因为测试本身内的n + 1个查询与我的生产应用程序中发生的事情无关,例如检查价值或联想.因此,修复n + 1故障不需要在我的控制器或模型上设置任何内容,而是需要在我的测试设置中设置一些内容以避免抛出该特定错误,并且我认为我的应用程序没有真正的性能改进.
最有效的方法根本不是.在测试中减少n + 1个查询可能有一些合理的优点,最明显的是加快总体执行时间.但是,很可能你要么测试得太多,要么取得的可能性要小于可能的收益.我还经常发现编写额外的代码以帮助支持测试而不是为应用程序的整体价值做出贡献是没有吸引力的.
请允许我建议您替代使用您的时间.只有单元测试才能达到您舒适程度的绝对最低水平.我个人喜欢专注于涉及验证相关问题和金钱或其他数学的复杂方法,您可能有不同的优先级.绘制线条将释放大量时间来编写测试套件中最无用且最脆弱的部分,这将占用您的大部分维护预算.
现在,你要做的就是你所有的额外时间?别担心,我们会为您找到一些东西......您可以从编写一些验收测试开始,特别是对于使用您刚刚放弃了大量单元测试的对象的区域.现在,您的n + 1警告实际上来自用户点击页面时的相同位置.现在,您可以继续删除所有n + 1个查询.
可是等等!不要这样做.相反,花费很少的时间来建立您的关系以使用触摸选项.然后,当子对象更新时,父级也将更新.这可能与n + 1查询有什么关系,你可能会想知道.好像我们只是添加查询...
这就是俄罗斯娃娃缓存的用武之地.添加它并正确测试它将消耗释放的单元测试和n + 1消除时间(如果你不小心,那么就会消耗一些).好的方面是它更加"真实世界",对模型中的微不足道或无关紧要的实现变化更具弹性,以及对应用程序的巨大性能提升,远远超出了通过急切加载所有内容来消除每个n + 1查询前面可能提供了.您将希望尽可能多地移动到嵌套缓存中并尽可能懒散地加载所有内容,以充分利用此方法.
万岁n + 1!
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |