代码之家  ›  专栏  ›  技术社区  ›  randombits

使用Ruby profile跟踪RSpec中的缓慢执行

  •  0
  • randombits  · 技术社区  · 14 年前

     %   cumulative   self              self     total
     time   seconds   seconds    calls  ms/call  ms/call  name
      0.37     0.37      0.37       69     5.33     5.33  #<Class:#<Object:0x99b2a1d>>#include
      0.01     0.38      0.01      208     0.06     0.06  String#fast_xs
      0.00    98.99      0.00        1     0.00 98987.00  #toplevel
    

    我需要研究一下为什么会有208个调用被调用到String#fastŠuxs,但这里真正的问题是在Štoplevel中到底发生了什么?有一个98987.00毫秒的延迟被花费在那里的东西,我需要一个更细粒度的方式来查看故障,以了解我可以改变我的规格测试,以加快事情。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    8 年前

    没有必要对配置文件输出感到困惑。你可以 find the problem(s) right away . 他们花的时间越多,就越容易找到。

    performance myths .

    • self time(exclusive)基于这样一个前提:浪费时间的唯一方法是不调用函数。当函数被不必要地调用时,您希望找到并除去的函数,或者如果IO被不必要地调用,它不会在self time中出现。如果只有在程序被解除阻塞时才采集样本,IO和其他阻塞时间根本不会显示。

    • ms per call(含),乘以函数的调用计数,除以总时间,得到函数负责的部分时间。由于只有这三个数字中的两个,您无法判断函数是否花费了太多时间。

    • 如果你能分辨出一个函数是否占了很大部分的时间,你仍然需要找出函数中负责时间的行。 如果探查器的行为像你关心的唯一单位是函数,你仍然留在做侦探工作。

        2
  •  0
  •   Community CDub    5 年前

    你有多少个测试?每个RSpec测试都会重新加载整个Rails环境,因此如果您有大量的测试,那么开销很可能来自于此。你可以看看 Spork 当你运行测试时。

    rubyonrails教程 recommends

        3
  •  0
  •   rogerdpack    14 年前