MANA-DOT

PIXEL ART, PROGRAMING, ETC.

IEのdocumentオブジェクト

amachangさんのこの記事

一行で IEJavaScript を高速化する方法 - IT戦記 http://d.hatena.ne.jp/amachang/20071010/1192012056 /*@cc_on _d=document;eval('var document=_d')@*/ この一行を読み込むことによって IE での document へのアクセスが 5 倍速くなります。

が5年前の記事だというのに昨日はてなブックマークのホットエントリ入りしていました。

なぜか虫の居所が悪かった僕は、はてなブックマークのコメントに

これ5年前の記事だから今のIEに対しても当てはまるかは少なくともこの記事からは確証とれないけど、今ブクマしてる人はそれ理解してるよね?特にプロパティアクセスなんてJSでも盛んに高速化されているのに http://b.hatena.ne.jp/manaten/20121010#bookmark-114595974

とやたら攻撃的なコメントをつけました。 正直IEがいくら評判悪いとはいえ、5年間でバージョンアップしているし、JavaScriptの高速化なんてかなりHOTな分野なので、この程度のことの改善はとっくにしてあるだろうと考えていたのです。そこで実際のところどうだろうと思ったので、テストしてみました。

テストに利用したコードはこんな感じ。

var loopNum = 1000*1000*10;
var date = new Date;
for (var i = 0; i < loopNum; i++) {
  document;
}
alert(new Date - date);

var d = document;
date = new Date;
for (var i = 0; i < loopNum; i++) {
  d;
}
alert(new Date - date);

amachangさんのテストコードほぼそのままで、ちょいいじった感じ。 ちなみにIE9ではグローバルでのdocumentの再定義はできなかったので、そのままでは動きませんでした。

では、実際に手元のIE(9.0.8112.16421)でこのコードを実行してみると・・・

上:2182 下:56

なんか知らないけど40倍くらい早くなっています。 このHACKが未だに有効であるどころか、以前よりもさらに効果があるようです。 はてブで大口叩いておいて結果問題なかったとかすごく恥ずかしいことをした気がします。 とはいえ、あの記事のコードがそのまま動かないのは事実ですが・・・。

しかし数年前の記事をなにも考えずに鵜呑みにするのは、特にこういう分野では良くないと思うので、少なくとも個人で検証するなり、同じ内容の新しい記事を探すなりはしたほうがいいのではないのかなと思います。

5年前に既にHACKとして確立されていた内容が未だに改善されていないのは個人的にすごく不思議です。