2010-11-20 12 views
0

私はJavascriptで書かれた3Dエンジンを維持しているので、私はとても興味があります。JavaScriptのパフォーマンスの質問

  1. どちらが高速ですか、parseInt(el.style.width)またはel.offsetWidthですか?
  2. parseInt(el.offsetWidth)を書いてください。
  3. どちらが速いですか?getElementById()またはchildNodes[]
  4. どちらが速いですか?new Image()またはappendChild('img')
  5. ありがとう私の華麗なJavaScriptのパフォーマンスガイド

へのリンクをしてください与えます!

+2

私の提案:自分でベンチマークしてください。直感的に、el.offsetWidthは高速です(el.style.widthのようなcssルールセット全体をトラバースする必要がないため)、childNodes []が高速です(全体をトラバースする必要がないためgetElementbyIdのようなDOM)。しかし、私は実際には分からないので、答えの代わりにこれをコメントにしています。 –

+2

@Ben - 'getElementbyId'はDOMをトラバースしません。この要素のメモリ内参照です。そのように非常に高速です。 – user113716

+0

Benと同意し、ベンチマークします。 AFAIK el.offsetWidthは実行時に計算されることがあります。あなたはおそらくいくつかのメモリをトレードオフし、すべての結果をキャッシュする必要があります。また、DOMが遅くてメモリが空いているので、私はキャンバスを使用することをお勧めします。 – c0rnh0li0

答えて

4

への参照。高速である

1.、のparseInt(el.style.width)またはel.offsetWidth?

  • el.style.widthあなたのマークアップではjavascriptやstyle属性によって設定された幅を提供します。

  • offsetWidthには、要素の現在の幅(枠線を含む)が表示されます。

2.私はparseInt(el.offsetWidth)を書くべきですか?

いいえ、offsetWidthは数字を返します。しかし、parseIntを使うたびに基数を指定する必要があります。

高速ですgetElementById()または

childNodes[]?あなたは親がchildNodesを使用して得た場合。あなたがidを持っていれば、byIdを使うことができます。パフォーマンスはブラウザによって異なります(test)。高速である

4.new Image()またはappendChild('img')

ブラウザにリソースをダウンロードさせたい場合は、new Image()を使用してください。あなたが追加したい場合は、レイアウトの画像は、私はむしろ、このリンクを残す素晴らしいJavaScriptのパフォーマンスガイド

へのリンクを私にしてください与えるappendChild(IMAGE_ELEMENT)

5.使用:http://jsperf.com/ A/Bテストをさせてください。

+0

A/B/C/D/E ...テスト? – Hello71

+0

@ Hello71 - A/Bテストは、2つの選択肢と1つの変数がある場合、マーケティングに関する意思決定を行うための実験的アプローチです。この文脈では、2つのコードの間のパフォーマンスを決定する方法論を指します。 – galambalazs

+0

ニースの答え+1。 IEと '... ById()'に興味があります。要素を見つけるために実際にDOMをトラバースしているのかどうか知りますか?私は、複雑なHTML構造上でのそのパフォーマンスについて興味があると思います。私はちょうどそれが速くなると常に仮定してきました。私はおそらく後でいくつかのテストを行うでしょう。 – user113716

関連する問題