2011-12-24 15 views
3

私のアプリケーションに本当に良いパフォーマンスが必要な場合は、もっと適切なことを知りたいと思います。私はPhoneGap経由でクロスプラットフォームのアプリケーションをプログラミングしています。コードは非常に重要です。document.getElementbyIDと変数の宣言と削除のパフォーマンス

より適切である:

document.getElementbyID('id').addEventListener() 

または

var id = document.getElementbyID('id'); 
id.addEventListener(); 

とどのように私は私のアプリのキーワードのパフォーマンスを向上させるために、「削除」を使用することができますか?

+3

パフォーマンス面で問題はありません。 *たぶん*万一一度に数万の要素に対してこれを行うと、微視的な違いがありますが、それはそうではありませんか? –

答えて

4

両者の差が限界であろう。パフォーマンスを向上させるには、DOMに追加するイベントハンドラの数を最小限に抑え、再度必要のないイベントハンドラを削除する必要があります。あなたが投稿した文脈では、削除は意味をなさない。 (連想)配列内の項目を解放するか、または作成したオブジェクトを削除するために使用する必要があります。あなたはあなたの例の中のどちらもしません。

各項目がクリック可能なリストでは、個々の要素ではなく、リストコンテナに1つのイベントハンドラを添付するだけです。ハンドラに渡されたイベントオブジェクトのtargetプロパティを使用して、タップされた実際のリスト項目を見つけることができます。


編集:li.idがクリックされた実際のアイテムを識別するために使用される複数のリスト項目

のための一つのイベントハンドラを使用する方法の例。 'li'に子がある場合は、正しい項目が見つかるまでターゲットのDOMツリーを上る必要があります。

<ul id="list"> 
    <li id="item_1">First Item</li> 
    <li id="item_2">Second Item</li> 
    <li id="item_3">Third Item</li> 
    <li id="item_4">Fourth Item</li> 
    <li id="item_5">Fifth Item</li> 
    <li id="item_6">Sixth Item</li> 
    <li id="item_7">Seventh Item</li> 
</ul> 

<script> 
    window.onload(function() { 
     document.getElementById("list").addEventListener("click", 
      function(event) { alert("" + event.target.id + " was clicked"); }); 
    }); 
</script> 
+0

こんにちは!申し訳ありませんが、あなたが提案した "ターゲット"プロパティメソッドを使用する例を私に示すことができます。どうもありがとうございました! –

0

JavaScriptは実行時に解釈されるため、最終的にはコンパイラが変数の割り当てを最適化するかどうかによって異なります。いずれにしても、その差はごくわずかです。いくつかのテストを構築し、参照してください。

読みやすさに焦点を当て(マイクロ最適化が心配されていないモデルを見つける)。

キーワード「削除」を使用して アプリのパフォーマンスを向上させるにはどうすればよいですか?

パフォーマンスを重視するアプリケーションについて議論しているので、JavaScriptで適切なガベージコレクションに関心があると思います。あなたが複数回、他のDOM要素を必要とする場合、それは両方の方法で同じ時間を要する

var id = document.getElementbyID('id'); 
id.addEventListener(); 

を使用することをお勧めしHow does garbage collection work in JavaScript?

+0

オブジェクトのプロパティを削除するには 'delete'を使います。たとえば、 'var x = {y:1};削除x.y; ' –

+0

@JamesAllardice - はい、ちょうど私自身のためにそれを見た...反映するために私のポストを編集しました。 –

+0

i c。ありがとう!今私は削除が実際に動作する方法を理解する! –

0

を参照してください。

+0

変数を使用すると、同じ要素に対して複数の文書を横断するのを防ぐことができます。 – Shraddha

5

this testによると、私はちょうどjsperf.comで行いました。document.getElementbyID('id').addEventListener()が最も速い方法です。 - Mac OS XのChromeで

Try itなどのブラウザを使用し、テストして、あなたが話していたdeleteなどの機能を追加/削除します。

JSPerf test results

+0

jsperfがちょっと混乱しているようですね。 ops/secが高いほどパフォーマンスが良いことを意味します(「最も遅い」テストは-123%(それは負の数であることに注意してください)が遅いことを指摘しています...)実際、 'var'テストは最も速かったです。 –

+0

今、私はハハを混乱させるよ!どちらが速いの?赤い表示は、後者がより速いことを実際に示しています。助けてくれてありがとう! –

+0

+1クールなツールを提案しています...しかし、私は同じブラウザで数秒間隔でテストしても非常に異なる結果を得ました(さらに@JamesAllardiceが指摘した不一致も気付きました)。 –