5

当启动一个有很多依赖项的 Rails 应用程序时,很多时间(我认为)花在requireing 文件上。

假设您要创建一个部署过程,该过程将所有require语句转换为文件连接,使用相同的规则(不要两次获取相同的文件等)。本质上,它将像资产管道处理 javascript 一样处理 Ruby。

这会产生真正的速度差异吗?它会产生任何问题 - 例如,变量范围 - 除了使错误更难追踪到其原始源文件吗?

简而言之,这是辉煌还是疯狂?

更新

正如 pst 指出的那样,这在生产中毫无意义,服务器可能会加载所有内容,然后分叉处理新请求。

但是考虑一下测试环境,每次运行测试时都会启动 Rails 应用程序。预先连接所有的 gem 可能会产生类似于 Spork gem 的效果。

我想我真正的问题是在解析文件内容上花费了多少时间require

4

2 回答 2

4

你会很高兴看到它是如何进入 Ruby 2.0 的:http: //bugs.ruby-lang.org/issues/7158

于 2012-11-07T23:34:34.067 回答
2

tldr; 跨请求摊销不会产生任何影响1 - 任何微不足道的启动成本都是无关紧要的2

1 “提高性能”的一种更好的方法是重用进程——例如,只为 N 个请求加载一次进程(这意味着只“运行”require一次语句)——就像已经完成的那样。

2对于那些真正对“它是否会更快解析”感兴趣的人,请运行基准测试。然后意识到这并不重要——即使在启动时节省一秒钟对网络服务器基础设施来说也不重要。(当然,它只会快几毫秒 - 从一些额外的磁盘搜索 - 如果有的话。)

于 2012-11-07T19:59:18.330 回答