array.push(x) と array[array.length]=x はどっちが速い?
2008年3月とちょっと古い資料ですが、Internet Explorer 8 Beta 1 for Developers ホワイトペーパー の「プラットフォーム パフォーマンスの向上」の資料に以下の記載があるのを見つけました。
配列の記憶域および JScript エンジン内でのアクセスの最適化によって、ほとんどの組み込み Array メソッドでパフォーマンスが向上します。組み込み Array メソッドのより迅速な代替メソッドとして独自の Array メソッド (Array.push や Array.pop など) を実装している JScript 作成者は、組み込みメソッドを使用してコード パフォーマンスを向上させることを検討してください。
そういえばこちらは原文が 2006年11月ともっと古い記事ですが、Dev.Opera の「効率的な JavaScript」にはこう書いてあります。
効率的な JavaScript - Dev.Opera
ふつうのコードでは効き目が薄いけれど, 性能の肝になるループや関数では高速化できることがある. 例の一つは配列の push メソッド. これは配列の最後を指す添字に要素を追加するより遅い.
http://dev.opera.com/articles/view/efficient-javascript-ja/?page=2#primitiveoperator
ということで、どっちが速いか実験してみました。
array.push(x) と array[array.length]=x はどっちが速い? - jsdo.it - share JavaScript, HTML5 and CSS
結果はこんな感じ。Windows 7 32bit です。
Opera 11.11
array.push(x); // 131 ms array[array.length]=x; // 60 ms
Windows Internet Explorer 10 Platform Preview 1
array.push(x); // 32 ms array[array.length]=x; // 44 ms
Windows Internet Explorer 8
array.push(i); //1192 ms array[array.length]=i; //1377 ms
ウェブブラウザによって特性が違うんですね。
ほかのブラウザでは実験しないのかという話はちょっと置いといて…
ということで、初めて jsdo.it 使ってみたのでした。
« 旧式のカラリオミーとアドエスで SDHC カードを使う | トップページ | 沖縄本島の覚え書き »
「プログラミング」カテゴリの記事
- DAD(2018.12.16)
- EditorConfig Vim Plugin を日本語環境の Windows で(2016.12.07)
- NetBeans を Mac の Java 6 で使う(2013.08.22)
- Bitbucket と GitHub のユーザー名を変更しました(2013.02.15)
- Mercurial で Office (2007) Open XML や OpenDocument を管理する(2011.11.21)
この記事へのコメントは終了しました。
コメント