2013-06-19 4 views
3

로드 시간에 Ruby 2.0.0이 큰 변화를 가져 왔습니다. c- 확장을 통해 해석 된 루비 코드 데이터를 캐싱하여로드 시간을 늘릴 수 있는지 궁금합니다. 그 아이디어는 pickaxe section "Embedding a Ruby Interpreter"을 읽는 동안 나에게 찾아왔다. 다음은 캐싱 의사 코드가 추가 된 스 니펫입니다.로드 시간을 단축하기 위해 해석 된 루비 코드 데이터를 c 확장으로 마샬링 할 수 있습니까?

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

이렇게 할 수 있나요?

+0

여기에 설명 된 캐싱 방법을 찾지 못했습니다 : https://github.com/ruby/ruby/blob/trunk/README.EXT. 검색 계속 ... – btd

답변

0

"해석 된 코드"를 캐시 할 수 없습니다. "바이트 코드"만 캐시 할 수 있습니다. 나는 그것이 큰 차이를 만들 것이라고 믿지 않는다. Rails 코드베이스에 몇 개의 파일이 있는지를 보면 상당히 빨리로드됩니다. 루비 코드를 바이트 코드로 변환하는 것이 특히 느린 것 같지 않습니다.

mruby "compiler"(https://github.com/mrbrdo/mruby_cc)를 만들었지 만 일반적인 해석 버전보다 훨씬 빠르지 않습니다. 기본적으로 "캐싱"으로 갈 수 있습니다.