3

Ruby 2.0.0 在加载时间上对我们产生了很大的影响。我想知道我们是否可以通过 c-extension 缓存解释的 ruby​​ 代码数据来获得更好的加载时间。我在阅读“嵌入 Ruby 解释器”部分时想到了这个想法。这是一个片段,其中添加了一些缓存伪代码。

#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 */
  }
}

这样的事情可能吗?

4

1 回答 1

0

您不能缓存“解释代码”。您只能缓存“字节码”。我不相信它会产生很大的不同。从 Rails 代码库中有多少文件来看,并且加载速度很快,将 ruby​​ 代码转换为字节码似乎并不特别慢。

我制作了一个 mruby“编译器”(https://github.com/mrbrdo/mruby_cc),它并没有比通常的解释版本快得多。这基本上是“缓存”所能达到的程度。

于 2015-04-20T11:10:22.470 回答