3

Ruby 2.0.0 はロード時間に大きな違いをもたらしました。解釈された Ruby コード データを c-extension 経由でキャッシュすることで、読み込み時間をさらに短縮できないかと考えていました。つるはしセクション「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 に答える