要求标准库是否会使程序变慢?
Does requiring from the standard library make a program slower?
当我问这个问题时,我特别想到 ruby,但如果答案与语言无关,我也想知道。
我经常从 ruby 标准库中 require
,即 fileutils
、open3
和 pathname
。
但如果我只需要在一两行中使用它们的功能,我会避免使用它们并寻求(有时可读性较差)不需要 require
.
的替代方案
但是,使用它们似乎不会影响我的脚本的性能,即使使用快速基准测试(使用 time
),事情似乎 运行 与我的速度相同用了不同的方法。但对我来说这似乎很奇怪,这没有什么区别,因为为什么要 require
d 使用它们(而不是直接包括在内)?所以,具体问题:
- 从标准库导入是否会使脚本变慢?
- 如果是这样,它总是可以忽略不计,还是取决于包?
- 第三方包呢?它们的导入速度是否比标准库中的慢?
导入库将花费非零时间,但时间量与库是什么成正比。有些非常小,有些大得多,但所有 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 $"
花费的时间取决于文件大小和关联文件的大小。
当我问这个问题时,我特别想到 ruby,但如果答案与语言无关,我也想知道。
我经常从 ruby 标准库中 require
,即 fileutils
、open3
和 pathname
。
但如果我只需要在一两行中使用它们的功能,我会避免使用它们并寻求(有时可读性较差)不需要 require
.
但是,使用它们似乎不会影响我的脚本的性能,即使使用快速基准测试(使用 time
),事情似乎 运行 与我的速度相同用了不同的方法。但对我来说这似乎很奇怪,这没有什么区别,因为为什么要 require
d 使用它们(而不是直接包括在内)?所以,具体问题:
- 从标准库导入是否会使脚本变慢?
- 如果是这样,它总是可以忽略不计,还是取决于包?
- 第三方包呢?它们的导入速度是否比标准库中的慢?
导入库将花费非零时间,但时间量与库是什么成正比。有些非常小,有些大得多,但所有 Ruby 附带的通常都可以快速加载。
除非您 运行 每秒执行一千次脚本,否则 require
的影响将是最小的。
通常最好尽早将所有 require
操作排除在外,以消除任何依赖性问题,尤其是对于 gem。没有什么比由于依赖关系破坏导致代码崩溃更糟糕的了,但只有当您执行不经常发生的特定操作时才会发生。
如果您要多次启动此过程,请考虑使用 Spring 之类的工具或您自己的分叉模型以避免启动惩罚。您可以 fork
任意次数的预配置流程,每一次都会几乎立即就绪。
当使用 require
时,您是在告诉 Ruby 加载一些文件(您自己的文件、标准库或外部库)。
所以是的,查找和加载它需要时间。
但所需文件正在加载 only once(通常在开始时因为通常 require
在文件顶部)。
Loads the given
name
, returningtrue
if successful andfalse
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$"
花费的时间取决于文件大小和关联文件的大小。