you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

node.jsのfiber実験

こんなことしてもいいのだろうか

script.js

var Fiber = require('fibers');
(function(){
var check = (function(){
    var i = 0;
    return Fiber.prototype.run.bind(Fiber(function() {
        // なんかする
        while (true) {
           // 完了するまで待つ
           if(i>=10000){
                break;
            }
            // いったん抜ける
            Fiber.yield(i++);
        }
        // 完了処理
        console.log('OKKKKKKKKKKKKKKKKKKKKKKKKKK');
    }));
})();
var f = function(){
    var r = check();
    if(r === undefined){
        return;
    }
    console.log(r);
    process.nextTick(f);
}
f();
console.log('pass');
})();

call.js

var fs = require('fs');
var cache = {};
var callscript = function(scriptname){
    var data = null;
    if( scriptname in cache ){
        data = cache[scriptname];
    }
    else{
        data = fs.readFileSync(scriptname);
        cache[scriptname] = data;
    }
    eval(data.toString());
}
callscript('./script.js');
callscript('./script.js');
callscript('./script.js');
callscript('./script.js');
callscript('./script.js');

node call.js

evalってJIT効かない気がするけどphpのincludeみたいなことはできるのか・・・