2008年2月15日(金)

« 【JavaScript】オブジェクトをキーに出来るハッシュのようなもの……って、これじゃだめ? | トップページ | はてブコメントをニコニコ動画っぽく表示するブックマークレット/Greasemonkey/SeaHorse »

【JavaScript】ベンチをとってみる<オブジェクトをキーに出来るハッシュのようなもの

ベンチマーク
var count=prompt('試行:キーの数は?',500);

(function(){

print('<a href="http://d.hatena.ne.jp/amachang/20080212/1202805356">すべてのオブジェクトをキーにできるハッシュの様なもの - IT戦記</a>の方法\n');

var dict = new Dictionary();

var keyno=0,keys=[],val;

print('SET '+count+' 回: '+bench(count,function(){
    keys[keyno]=new Function('print('+keyno+')');
    dict(keys[keyno],keyno++);
})+'ms<br />');

print('GET(0) '+count+' 回: '+bench(count,function(){
    val=dict(keys[0]);
})+'ms');
print('※dict('+keys[0].toString()+')='+val+'<br />');

var mid=~~(keyno/2)-1;
print('GET('+mid+') '+count+' 回: '+bench(count,function(){
    val=dict(keys[mid]);
})+'ms');
print('※dict('+keys[mid].toString()+')='+val+'<br />');

print('GET('+(keyno-1)+') '+count+' 回: '+bench(count,function(){
    val=dict(keys[keyno-1]);
})+'ms');
print('※dict('+keys[keyno-1].toString()+')='+val+'<br />');

})();

print('');

(function(){

print('<a href="http://furyu.tea-nifty.com/annex/2008/02/javascript_bc80.html">風柳亭 - 別館:書庫のある庵 -: 【JavaScript】オブジェクトをキーに出来るハッシュのようなもの……って、これじゃだめ?</a>の方法\n');

var assoca = new Object.associativeArray();

var keyno=0,keys=[],val;

print('SET '+count+' 回: '+bench(count,function(){
    keys[keyno]=new Function('print('+keyno+')');
    assoca.set(keys[keyno],keyno++);
})+'ms<br />');

print('GET(0) '+count+' 回: '+bench(count,function(){
    val=assoca.get(keys[0]);
})+'ms');
print('※assoca.get('+keys[0].toString()+')='+val+'<br />');

var mid=~~(keyno/2)-1;
print('GET('+mid+') '+count+' 回: '+bench(count,function(){
    val=assoca.get(keys[mid]);
})+'ms');
print('※assoca.get('+keys[mid].toString()+')='+val+'<br />');

print('GET('+(keyno-1)+') '+count+' 回: '+bench(count,function(){
    val=assoca.get(keys[keyno-1]);
})+'ms');
print('※assoca.get('+keys[keyno-1].toString()+')='+val+'<br />');

})();
■結果
すべてのオブジェクトをキーにできるハッシュの様なもの - IT戦記の方法
SET 500 回: 594ms

GET(0) 500 回: 1250ms
※dict(function anonymous() { print(0) })=0

GET(249) 500 回: 547ms
※dict(function anonymous() { print(249) })=249

GET(499) 500 回: 0ms
※dict(function anonymous() { print(499) })=499


風柳亭 - 別館:書庫のある庵 -: 【JavaScript】オブジェクトをキーに出来るハッシュのようなもの……って、これじゃだめ?の方法
SET 500 回: 47ms

GET(0) 500 回: 0ms
※assoca.get(function anonymous() { print(0) })=0

GET(249) 500 回: 16ms
※assoca.get(function anonymous() { print(249) })=249

GET(499) 500 回: 0ms
※assoca.get(function anonymous() { print(499) })=499

上記は、IE7での結果です。
ある意味、当たり前の結果に。
ちなみに amachang 氏の方だと、Firefox 2.0.0.12(+Firebug)で試行回数を1000にしたら"too much recursion"エラー発生。
999回だと発生しない……なに、この意図的な数字(苦笑)。

この記事をニフティクリップβに追加 この記事をはてなブックマークに追加 2008/02/15(金) 00:38 | | 記事の編集(管理者用)

風柳へひとこと(web拍手) 

おもいつき」カテゴリの記事

パソコン・インターネット」カテゴリの記事

トラックバック

この記事のトラックバックURL:

記事との関連性が薄いものやSPAM等、管理人が不適切と見なしたトラックバックについては予告無く削除する場合が有ります。悪しからずご了承下さい。

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/161784/40126714

この記事へのトラックバック一覧です: 【JavaScript】ベンチをとってみる<オブジェクトをキーに出来るハッシュのようなもの:

コメント

コメントを書く