ruby - 是否可以在 c 扩展中编码解释的 ruby​​ 代码数据以加快加载时间?

标签 ruby marshalling load-time

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/

相关文章:

c# - 通过 C# 中的 COM RCW 对象检测跨线程编码

html - 链接到很多 favicon 图像大小会使页面变慢吗?

ruby - Rails 中不区分大小写的搜索

c# - 从 C++ 获取复杂结构到 C#

c# - 如何正确地将字符串从 Unity 编码到 C/C++?

jqgrid - 在 jqGrid 中加载时触发客户端过滤

php - 什么加载时间更重 : css or php requests?

ruby-on-rails - strftime - 是否修改该值?

ruby-on-rails - Rspec工厂少女faker不接受专栏

ruby-on-rails - Link_to create with parameter before - ForbiddenAttributesError 现在