【问题标题】:Does requiring from the standard library make a program slower?标准库中的要求会使程序变慢吗?
【发布时间】:2019-08-17 10:48:18
【问题描述】:

当我问这个问题时,我特别想到了 ruby​​,但如果答案与语言无关,我也想知道。

我经常require来自ruby标准库,即fileutilsopen3pathname

但如果我只需要在一两行代码中使用它们的功能,我会避开它们并选择(有时可读性较差)不需要require 的替代方案。

但是,使用它们似乎不会影响我的脚本的性能,即使使用快速基准测试(使用 time),如果我使用不同的方法,运行速度似乎也是一样的。但对我来说这似乎很奇怪,这没有什么区别,因为为什么要让它们成为required 以供使用(而不是直接包括在内)?所以,具体问题:

  1. 从标准库导入是否会使脚本变慢?
  2. 如果是这样,它是否总是可以忽略不计,还是取决于软件包?
  3. 第三方包呢?它们的导入速度是否比标准库中的慢?

【问题讨论】:

  • 据我所知,Ruby 不会延迟加载库,因此肯定会有一些开销。关于标准库,我认为 Ruby 将它们作为 dylibs 提供(尽管这是一个猜测),所以开销很小。

标签: ruby import require standard-library


【解决方案1】:

导入库将花费非零时间,但时间量与库成正比。有些非常小,有些则大得多,但所有随 Ruby 提供的通常都可以快速加载。

除非您每秒运行脚本一千次,否则require 的影响将是最小的。

通常最好尽早将所有require 操作排除在外,以消除任何依赖问题,尤其是对于gem。没有什么比由于依赖关系损坏而崩溃的代码更糟糕的了,但只有当您执行不经常发生的特定操作时。

如果您要启动此过程数千次,请考虑使用 Spring 之类的工具或您自己的分叉模型来避免启动惩罚。您可以fork 一个预配置的进程任意次数,每一次几乎都将立即准备就绪。

【讨论】:

    【解决方案2】:

    当使用require 时,您是在告诉 Ruby 加载一些文件(您自己的文件、标准库或外部库)。

    所以是的,查找和加载它需要时间。

    但所需的文件正在加载only once(通常在开始时,因为通常require在文件顶部)。

    加载给定的name,如果成功则返回true,如果功能已加载,则返回false

    加载文件的绝对路径添加到$LOADED_FEATURES$")。如果文件的路径已经出现在$"中,则不会再次加载文件

    而花费的时间取决于文件大小和关联文件的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多