Ruby 从标准库中获取数据会使程序变慢吗?
当我问这个问题时,我特别想到了ruby,但是如果答案是语言不可知的,我也想知道 我经常Ruby 从标准库中获取数据会使程序变慢吗?,ruby,import,require,standard-library,Ruby,Import,Require,Standard Library,当我问这个问题时,我特别想到了ruby,但是如果答案是语言不可知的,我也想知道 我经常需要ruby标准库中的文件,即fileutils,open3,和pathname 但是,如果我只需要在一两行中使用它们的功能,我会避免使用它们,而选择不需要require的替代方案(有时可读性较差) 然而,使用它们似乎不会影响脚本的性能,即使使用快速基准测试(使用时间),如果使用不同的方法,事情似乎也会以相同的速度运行。但对我来说,这似乎很奇怪,这没有什么区别,因为为什么要让它们required供使用(而不仅仅
需要ruby标准库中的文件,即fileutils
,open3
,和pathname
但是,如果我只需要在一两行中使用它们的功能,我会避免使用它们,而选择不需要require
的替代方案(有时可读性较差)
然而,使用它们似乎不会影响脚本的性能,即使使用快速基准测试(使用时间
),如果使用不同的方法,事情似乎也会以相同的速度运行。但对我来说,这似乎很奇怪,这没有什么区别,因为为什么要让它们require
d供使用(而不仅仅是直接包括在内)?因此,具体问题如下:
从标准库导入是否会降低脚本速度
如果是这样,它总是可以忽略不计,还是取决于软件包
第三方软件包呢?它们的导入速度是否比标准库中的慢
导入库将花费非零的时间,但时间量与库的类型成正比。有些非常小,有些大得多,但所有随Ruby提供的软件通常都可以快速加载
除非每秒运行一千次脚本,require
的影响将是最小的
通常最好尽早排除所有require
操作,以摆脱任何依赖性问题,尤其是gems。没有什么比因为依赖关系被破坏而崩溃的代码更糟糕的了,但只有当您执行一个不经常发生的特定操作时才会发生
如果你开始这个过程几千次,考虑一个工具或者你自己的分叉模型来避免启动惩罚。您可以对预先配置的进程执行任意次数的fork操作,每一次操作几乎都会立即就绪。
使用require
时,您告诉Ruby加载一些文件(您自己的文件、标准库或外部库)
是的,查找和加载它需要时间
但所需文件正在加载(通常在开始时,因为通常require
位于文件顶部)
加载给定的名称
,如果成功则返回true
,如果功能已加载则返回false
加载文件的绝对路径将添加到$loaded\u功能中($”
)。如果文件的路径已出现在$”
花费的时间取决于文件大小和关联文件的大小。据我所知,Ruby不会延迟加载库,因此肯定会有一些开销。关于标准库,我假设Ruby将它们作为dylibs提供(尽管这是一个猜测),因此开销很小。