Rhinoでコンパイル後のパフォーマンスを簡単にチェック


文字列連結

function randStr(len){
	var str ="";
	for(var i=0;i<len;i++){
		str += String.fromCharCode(Math.floor(Math.random()*93)+33);
	}
	return str;
}

var total=0;
var start,end;
var str = "";
var tempStr = "";
for(var i=0;i<100000;i++){
	tempStr = randStr(25);
	start = new Date().getTime();
	str += tempStr;
	end = new Date().getTime();
	total += (end - start);
}

print(total);
//alert(total);


opt -1:59350
opt 0:60080
opt 1:58732.5
opt 4:596150
opt 9:58700


firefox:460
IE:7470




高速版

//http://d.hatena.ne.jp/shogo4405/20070125/1169713463
function FString(){
    var k = -1, b = [];

    this.append = function()
    {
        for(var i=0,f=arguments.length;i<f;i++)
        {
            if(!arguments[i]){
				b[++k] = "";
				continue;//break;
			}
            b[++k] = arguments[i];
        };
    };

    function toString(s){ return b.join(s || ''); };
    this.valueOf = this.toString = toString;
};
FString.prototype = new String();


function randStr(len){
	var str ="";
	for(var i=0;i<len;i++){
		str += String.fromCharCode(Math.floor(Math.random()*93)+33);
	}
	return str;
}

var total=0;
var start,end;
var fstr = new FString();
var tempStr = "";
for(var i=0;i<100000;i++){
	tempStr = randStr(25);
	start = new Date().getTime();
	fstr.append(tempStr);
	end = new Date().getTime();
	total += (end - start);
}

start = new Date().getTime();
fstr = fstr.toString();
end = new Date().getTime();
total += (end - start);

print(total);
//alert(total);

opt -1:742
opt 0:878.5
opt 1:933.25
opt 4:923.25
opt 9:951
firefox:1400


環境も何もかも適当なベンチだがまあだいたい把握した