Buzzurlの中の人日記
JavaScriptのオブジェクトって、ハッシュテーブルのようにアクセスできます。ハッシュテーブルが必要なときにはオブジェクト作ってキーをプロパティとして値を突っ込んでハッシュテーブルとして使ってます。
でも、プロパティへのアクセスがあまり早くないことはよく知られていて、特に大量(と言っても数万件とかのオーダー)のデータを取り扱ったりするとすごく重くなったりするのを体験したことがある方も多いと思います。
超超高級言語とはいえ、いくらなんでもこんな遅くはならんだろうと常々いぶかしく思ってたわけです。
ふと思い立って、なんかオブジェクトのプロパティへのアクセスはハッシュテーブルと同等と勝手に思い込んでたけどもしかしてキーの数nに対してO(n)とかそれより遅いのとかになってんじゃね?とか思って確かめてみた。
まずは仕様書の和訳をざっと眺めるけど、特にプロパティアクセスに対する要求は見当たらない。(斜め読みなので要件があったらごめんなさい)
じゃあと思って調査。
やり方はキーの数100から10000まで100刻みのハッシュを用意して10000回値の読み書きを試みた。(キー数が少なすぎるけど、あんまり多くするとブラウザで実行するのがつらくなるので・・)
結果:IEもFFも読み取り書き込みともにO(1)だった。
当たり前の結果でつまんないのでベンチのソースは略。
別にハッシュテーブルの実装が悪いわけじゃなくて根本的に遅いだけだった。
でも、プロパティへのアクセスがあまり早くないことはよく知られていて、特に大量(と言っても数万件とかのオーダー)のデータを取り扱ったりするとすごく重くなったりするのを体験したことがある方も多いと思います。
超超高級言語とはいえ、いくらなんでもこんな遅くはならんだろうと常々いぶかしく思ってたわけです。
ふと思い立って、なんかオブジェクトのプロパティへのアクセスはハッシュテーブルと同等と勝手に思い込んでたけどもしかしてキーの数nに対してO(n)とかそれより遅いのとかになってんじゃね?とか思って確かめてみた。
まずは仕様書の和訳をざっと眺めるけど、特にプロパティアクセスに対する要求は見当たらない。(斜め読みなので要件があったらごめんなさい)
じゃあと思って調査。
やり方はキーの数100から10000まで100刻みのハッシュを用意して10000回値の読み書きを試みた。(キー数が少なすぎるけど、あんまり多くするとブラウザで実行するのがつらくなるので・・)
結果:IEもFFも読み取り書き込みともにO(1)だった。
当たり前の結果でつまんないのでベンチのソースは略。
別にハッシュテーブルの実装が悪いわけじゃなくて根本的に遅いだけだった。
この記事にコメントする

