2011-08-11 3 views
1

多くのイベントバインディングを持つHTML5モバイルアプリを構築しています。データバインディングのために頻繁に変更される大きなDOMもあるため、イベントの直接バインド(jQuery.bindまたはaddEventListener)はおそらく適切ではありません。jQuery.live()、またはインラインのonevent属性の方がパフォーマンスが良いですか?

// jQuery.bind 
$("div").live("click", fnName); 

// Inline 
<div onclick="fnName(this);"></div> 

私は携帯電話のWebKitの特定の文脈の中で最も興味を持っていますが、私は他のブラウザが同様に運賃方法を学ぶことに興味があると思い:間のトレードオフは何ですか。

+0

どのようにパフォーマンスを測定するつもりですか?ページの読み込み時間または応答時間 – RobG

+0

@RobG:応答時間とメモリ使用率 –

+0

応答時間の場合、特にすべてのdivにリスナーがある場合は、インラインが先になります。より多くのメモリを使用するかもしれませんが、その違いは重要ではありません。 – RobG

答えて

2

.delegate().live()よりも速く、あなたの選択肢かもしれません。あなたはさらにhereを読むことができます。

2

.live()のほうがはるかに高速で、onclickバージョンよりもメモリ使用量が少なくなります。

onclick="fnName(this);"を実行するたびに、新しい関数が作成され、何千もの同じ関数のメモリフットプリントがゼロになります。 onclickを使用すると、各divを作成するのに少し時間がかかります。

.live()と.delegateの違いはおそらく軽微ですが、可能であれば.delegate()を使用してください。

+0

.delegate(および.bind)に関するサブ質問:DOMノードが削除されて再作成された場合、添付されたイベントは消えますか? (私はそう仮定しています。).live()とoneventの両方がこの問題を回避します。 –

+0

@evan - あなたの主張をテストしましたか?インラインハンドラは、関連するイベントが要素に到達したときに呼び出される単一の関数を作成します。これらの関数は、毎回作成されることはありません。違いはメモリであり、読み込み時間は無視できる(あなたが何かを測定することができれば)。 jQueryや.liveを使わなくても簡単にイベントの委譲を行うことができ、ロード時間が短縮されます(ロードするコードが100kb少なくなります)。 – RobG

関連する問題