Sep 10, 2008

Chromeのevalは遅い?

Google ChromeのJavaScript、evalしたらすごい遅かった - むぅもぉ.jp

本当に?

V8 shellを使って以下のコードを実行したら、test1が20msec、test2が1168msecかかった。Athlon 64 X2 5000+上のVM上で実行したものなので数値はあまり信用できないが、test2の方が明らかに遅い。

function test1() {
    var date = new Date();
    var result = 0;
    for(var i = 0; i < 1000000; i++){
        result += i;
    }
    print((new Date() - date).toString());
}
function test2() {
    var code = [
        'var result = 0;',
        'for(var i = 0; i < 1000000; i++){',
            'result += i;',
        '}'
    ].join('\n');
    var date = new Date();
    eval(code);
    print((new Date() - date).toString());
}
test1();
test2();

でもこれはChromeのevalが遅いからそうなるのか?

そうではない。test2をちょっとだけ書き換えたtest3を用意してみた。

function test3() {
    var code = [
        'var result = 0;',
        'for(var i = 0; i < 1000000; i++){',
            'result += i;',
        '}'
    ].join('\n');
    var date = new Date();
    eval('function calcEval(){' + code + '}');
    calcEval();
    print((new Date() - date).toString());
}
test3();

と、やっぱり20msecで済み、test1と遜色ない結果になる。場合によってはtest3の方がtest1より速くなることもある。

ブラウザで確認する場合は以下のページからどうぞ。test1, test2は元記事のもので、test3が新しく追加したもの。私の環境だとtest1, test3が20msec、test2が約1900msecかかる。

JavaScriptテスト

追記: Ogawa::Buzz: Chromeのevalは遅い? (cont)

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com