
photo by pigsonthewinguk
この記事の意味するところは2つあります。
1…IEがconst(定数のこと)を実装した。
実はFirefoxでは以前から実装済みだったんですが、その他の言語と違い「varよりconstの方が速い」というわけじゃないので、ふ~んっていう感じです(無いだろうけど、IEのconstは速い、とかならすんませんw)。
で、二つ目が問題。
2…amachangさんのIE高速化の方法が使えない。
天才スクリプターamachangさんの考案したこの方法はIE7を5倍速く、IE8でも2倍は速くするという現役バリバリの優れモノ。
しかしdocumentがvarからconstになっちゃったので、グローバルでの再定義ができなくなっちゃったのでした・・・。
つまり、グローバルスコープではvar document = hogehoge;というようにdocumentに何かを代入することができなくなったというわけです。
実はjQueryでも同じような方法を使っているのですが、問題無く動作しています。
jQueryはコード全体を即時関数でラップしているので、コード全体がローカルスコープなんですね。
なので、var documentを即時関数内のスコープで宣言すれば問題ないというわけです。
バージョン1.5のソースコードの2行目に記述されています。
var document = window.document;
javascriptではグローバルスコープにいろいろ書くのは良くないことなので、コード全体を即時関数でラップするのが通例のようになっていますが、こういう局面でもその手法が役に立ちますね!
つまり・・・
(function(){
var document = window.document;
//ここにコードを書いていく
}());
var document = window.document;
//ここにコードを書いていく
}());
このように書けば今まで通り高速化できます。
ちなみに・・・
IEで、と書きましたが、グローバルスコープでこれを実行する場合、IE以外は全然速くなりません(かえって遅くなることもあるかも)。
即時関数でラップしたローカルスコープ内ならIE以外も多少(わずかですが)恩恵を受けることになるかと思います。
なので「IEのみに適用する記述」はこの場合必要ないかと思われます。
記事の話題関連のツイート on twitter