Ruby 2.0.0 在加载时间方面给我们带来了很大的不同。我想知道我们是否可以通过 c-extension 缓存解释的 ruby 代码数据来获得更好的加载时间。我在阅读时想到了这个想法 pickaxe section "Embedding a Ruby Interpreter" .这是其中的一个片段,其中添加了一些缓存伪代码。
#include "ruby.h"
main() {
/* ... our own application stuff ... */
ruby_init();
ruby_script("embedded");
/* HERE IS THE PSEUDOCODE FOR CACHING */
if (ruby_file_previously_loaded_and_cached())
load_marshalled_ruby_data();
else
rb_load_file("start.rb");
cache_all_the_ruby_data();
end
while (1) {
if (need_to_do_ruby) {
ruby_run();
}
/* ... run our app stuff */
}
}
这样的事情可能吗?
最佳答案
您不能缓存“解释代码”。您只能缓存“字节码”。我不相信这会产生很大的不同。 从 Rails 代码库中的文件数量来看,加载速度非常快,将 ruby 代码转换为字节码似乎并没有特别慢。
我制作了一个 mruby“编译器”(https://github.com/mrbrdo/mruby_cc),它并不比通常的解释版本快多少。这基本上是“缓存”的极限。
关于ruby - 是否可以在 c 扩展中编码解释的 ruby 代码数据以加快加载时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181272/