如何加快使用 require 语句的脚本的加载时间



我从使用Crack切换到Nokogiri来解析类似XML的短字符串。

我不确定这是否是原因,但现在加载我的脚本似乎需要 4 分钟,而不是 20 秒。

很难找出原因,因为我对代码进行了一些更改,但是当我将时间戳放入日志中时,它是使用 gem 的require语句和关联脚本的require_relative语句的加载时间。

由于我在工作线程实例上运行这些脚本,因此每次调用脚本时,它都必须加载关联的文件,因此这种急剧增加确实会影响性能。

  1. Nokogiri的加载速度会特别慢吗?
  2. 有什么建议可以加快速度恢复到以前的速度?

补充:我从提供辅助角色实例的供应商那里获得了一些其他信息。 这就提出了一个问题,可以回答这个问题:

https://stackoverflow.com/questions/27802760/does-nokogiri-rebuild-itself-with-a-require-statement

nokogiri的加载速度会特别慢吗?

可能,但不是为了需要Nokogiri而慢4分钟。

例如,在我的笔记本电脑上,require "nokogiri"需要 1 秒。

当您在 Ruby 中计时时,请使用 benchmark 模块。

很难找出原因,因为我对代码进行了一些更改

以下步骤可以帮助您找出原因:

  1. 发射irb然后"需要"nokogiri":_____秒

    require "benchmark"
    time = Benchmark.measure do
      require "nokogiri"
    end
    puts time
    => 0.040000 0.020000 0.060000 (0.092582)
    
  2. 按原样启动原始脚本,而不处理任何 XML:_____ 秒

  3. 将上面的基准代码添加到原始脚本中,然后按上述方式启动:_____ 秒

  4. 将简单的基准测试脚本部署到您的工作线程并运行脚本:_____ 秒

    require "benchmark"
    time = Benchmark.measure do
      require "nokogiri"
    end
    puts time
    
  5. 在新脚本中记录计时:_____ 秒

    require "logger"
    logger = Logger.new("example.log")
    logger.level = Logger::DEBUG
    logger.debug("The logger debug is working")
    require "benchmark"
    time = Benchmark.measure do
      require "nokogiri"
    end
    logger.debug("require nokogiri time: #{time}")       
    

有什么建议可以加快速度恢复到以前的速度?

  1. 在代码的各个部分周围使用 Ruby benchmark 方法。

  2. 添加logger.debug语句以确保应用按预期执行。

  3. ps命令向您显示(或使用您选择的监控工具)使用的 RAM 量是什么?无内存?中央处理器负载?

  4. 对于启动期间打开的文件,lsof命令向您显示什么(或使用您选择的监视工具)?

  5. 你知道dtrace吗,如果是这样,dtrace探针会出现什么?

  6. 您能否以某种方式守护脚本,以便始终加载脚本?

相关内容

  • 没有找到相关文章

最新更新