【JavaScript】ベンチをとってみる<オブジェクトをキーに出来るハッシュのようなもの
すべてのオブジェクトをキーにできるハッシュの様なもの - IT戦記と
【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="https://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 />');
})();
■結果(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="https://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での結果です。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
ある意味、当たり前の結果に。
ちなみに amachang 氏の方だと、Firefox 2.0.0.12(+Firebug)で試行回数を1000にしたら"too much recursion"エラー発生。
999回だと発生しない……なに、この意図的な数字(苦笑)。
999回だと発生しない……なに、この意図的な数字(苦笑)。
« 【JavaScript】オブジェクトをキーに出来るハッシュのようなもの……って、これじゃだめ? | トップページ | はてブコメントをニコニコ動画っぽく表示するブックマークレット/Greasemonkey/SeaHorse »
「パソコン・インターネット」カテゴリの記事
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- BIGLOBE光ネクスト(大阪)の通信速度問題 - プロバイダ選びは難しい……(2015.08.13)
- BOOK☆WALKER さんに関して最近経験した不安と不満(2015.08.10)
- 『#鳥獣戯画制作キット』が楽しい(2015.07.01)
「おもいつき」カテゴリの記事
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- 【覚書】風柳亭(ココログプロ)をレスポンシブWebデザイン化(Bootstrap3使用)(2015.10.09)
« 【JavaScript】オブジェクトをキーに出来るハッシュのようなもの……って、これじゃだめ? | トップページ | はてブコメントをニコニコ動画っぽく表示するブックマークレット/Greasemonkey/SeaHorse »
コメント