要求标准库是否会使程序变慢?

Does requiring from the standard library make a program slower?

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

我经常从 ruby 标准库中 require,即 fileutilsopen3pathname

但如果我只需要在一两行中使用它们的功能,我会避免使用它们并寻求(有时可读性较差)不需要 require.

的替代方案

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

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

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

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

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

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

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

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

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

Loads the given name, returning true if successful and false if the feature is already loaded.

The absolute path of the loaded file is added to $LOADED_FEATURES ($"). A file will not be loaded again if its path already appears in $"

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