« 旧式のカラリオミーとアドエスで SDHC カードを使う | トップページ | 沖縄本島の覚え書き »

2011年5月27日 (金)

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 カードを使う | トップページ | 沖縄本島の覚え書き »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/78033/51778436

この記事へのトラックバック一覧です: array.push(x) と array[array.length]=x はどっちが速い?:

« 旧式のカラリオミーとアドエスで SDHC カードを使う | トップページ | 沖縄本島の覚え書き »

Social connection

  • Check

最近のトラックバック

2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

これも見とるよ

その他

無料ブログはココログ