Ruby 从标准库中获取数据会使程序变慢吗?

Ruby 从标准库中获取数据会使程序变慢吗?,ruby,import,require,standard-library,Ruby,Import,Require,Standard Library,当我问这个问题时,我特别想到了ruby,但是如果答案是语言不可知的,我也想知道 我经常需要ruby标准库中的文件,即fileutils,open3,和pathname 但是,如果我只需要在一两行中使用它们的功能,我会避免使用它们,而选择不需要require的替代方案(有时可读性较差) 然而,使用它们似乎不会影响脚本的性能,即使使用快速基准测试(使用时间),如果使用不同的方法,事情似乎也会以相同的速度运行。但对我来说,这似乎很奇怪,这没有什么区别,因为为什么要让它们required供使用(而不仅仅

当我问这个问题时,我特别想到了ruby,但是如果答案是语言不可知的,我也想知道

我经常
需要ruby标准库中的
文件,即
fileutils
open3
,和
pathname

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

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

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

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

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

    通常最好尽早排除所有
    require
    操作,以摆脱任何依赖性问题,尤其是gems。没有什么比因为依赖关系被破坏而崩溃的代码更糟糕的了,但只有当您执行一个不经常发生的特定操作时才会发生


    如果你开始这个过程几千次,考虑一个工具或者你自己的分叉模型来避免启动惩罚。您可以对预先配置的进程执行任意次数的fork操作,每一次操作几乎都会立即就绪。

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

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

    但所需文件正在加载(通常在开始时,因为通常
    require
    位于文件顶部)

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

    加载文件的绝对路径将添加到
    $loaded\u功能中(
    $”
    )。如果文件的路径已出现在
    $”


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

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