2010-03-08 49 views
4

我知道它是更好的編碼實踐,以避免內嵌的JavaScript,如:內嵌JavaScript性能

<img id="the_image" onclick="do_this(true);return false;"/> 

我想切換這種東西的束縛jQuery的點擊事件,如:

$("#the_image").bind("click",function(){ 
    do_this(true); 
    return false; 
}); 

威爾如果我綁定大量點擊事件,我會失去任何性能?我並不擔心最初綁定事件所需的時間,而是點擊和響應之間的響應時間。

我敢打賭,如果有差異,它可以忽略不計,但我會有一大堆的功能。我想知道是否瀏覽器像綁定事件一樣處理onclick屬性。

謝謝

+0

「一噸」有多少? – 2010-03-09 00:36:58

回答

2

保存自己的煩惱,使用事件

$("#the_image").on("click",function(){ 
    do_this(true); 
    return false; 
}); 

一個事件,沒有性能損失與多個項目。

+2

「多個項​​目沒有性能問題」絕對是錯誤的。你可能沒有注意到它的幾個元素,但是對數百或數千個元素進行實時事件,你會看到性能受到影響。另外,我不明白爲什麼你需要一個元素上的現場活動。 (您的示例使用了一個用於CSS選擇器的ID,它是唯一的。) – 2010-03-09 00:34:56

+2

我收回了以前的評論;顯然,jQuery團隊使用jQuery 1.4優化了他們的「實時」算法,因此使用「live」的性能實際上已經沒有了。 +1 – 2010-08-26 00:26:59

+0

@MikeRobinson可能值得更新您的答案,以清楚說明.live現在已被棄用 – Undefined 2012-08-03 08:34:32

1

在我的工作中,它依賴於。我把我所有的事件都移到了jquery中。然後,我使用FireBug來描述JavaScript,以查看最長的時間。然後我優化那些花時間最長的。

如果只有其中幾個,您將不會注意到任何退化。如果它的數百或數千,那麼你可能會。

0

差異可以忽略不計。如果您必須綁定到頁面中的多個項目,則可能會出現性能問題,您可能希望綁定到更高級別的對象,只需截取目標項目(圖像),然後將點擊綁定到包含DIV標籤。除此之外,它應該沒問題,具體取決於你的用例。

查看JavaScript中的事件冒泡以瞭解更多細節。

+0

謝謝,現在我想知道性能是否會因jquery而降低,或者如果我這樣做會傷害性能: the_image.onclick = function(){ do_this(true); }; 再次感謝! – Geromey 2010-03-09 00:38:47

+0

它主要是大量的事件監聽器,特別是在IE中,因爲在IE中,js引擎和渲染/ DOM引擎是跨越COM的邊界。兩者之間的差異是可以忽略的,但使用.live可以提供幫助,因此可以綁定到DOM中更高的內容,以便在事件泡泡中捕獲它。 – Tracker1 2010-03-10 23:57:22