2013-03-21 73 views
2

我有一個對象,當該對象被實例化時,它將一個單擊事件處理程序附加到<body>。 (附加過程發生在該對象的定義內).off()/ .on()的效率jQuery事件處理程序綁定組合

當URL更改(用戶導航到另一頁時)時,此對象被實例化。

這個對象總是存在一種類型的'每頁',並且如前所述,當該樂曲改變時它重新實例化,並且舊對象將不再存在。

的安裝過程是這樣的:

var doc = $(document.body); 

doc.off('click'); 

doc.on('click', function(){ 
    do_stuff(); 
}); 

我使用這個,因爲我注意到,如果只是將事件處理程序,省略.off(),處理器將觸發更多的時間在一個簡單的點擊,我瀏覽通過該網站(因爲它已附加/註冊該對象的每個實例)。

現在,我可以將此附件過程移到其他地方,例如在實例化發生的代碼部分,因此它不依賴於該對象並確保該處理程序將僅附加一次,但這會剝奪我訪問一些局部變量,我必須讓它們可以訪問該代碼部分。

我的問題是:這是否在性能方面花費很多?我注意到這裏有一些帖子,在stackoverflow,強調這不是最優的,但大多數的例子顯示代碼.off()或解除綁定發生裏面.on() /綁定。

重要說明:我正在使用backbone.js。這是一個「單頁網站」。對象基本上是視圖,它們的實例化發生在路由器中。

+0

看起來你根本不需要解除綁定。使用所謂的直播活動,不要打擾所有這些重新初始化混亂。 – shabunc 2013-03-21 10:46:08

+0

可以請你更具體嗎? – Zubzob 2013-03-21 10:57:35

+2

是的,'.off()'會花費一些東西,但它非常微不足道,你不需要爲它失眠。 '.off()'是在事件處理程序重新綁定之前確保元素以乾淨的表格開始的理想方法。如果你需要有選擇地解除綁定,那麼你可以命名空間你的事件。請參閱[on()的文檔](http://api.jquery.com/on/)。 – 2013-03-21 11:08:36

回答

1

簡而言之,不,使用off沒有意義的性能損失。現在我不會在一堆聖經上發誓說off不可能導致性能問題,但我會說在99個100(也許更像999的999或10000的9999)真實世界的情況下,你永遠不會不得不擔心導致性能問題。

換句話說,off永遠不會導致明顯的性能下降,除非你對它做了一些非常瘋狂的事情,或者有一個非常瘋狂的網站,它無意中做了一些非常瘋狂的事情。

另一方面,不會調用off可能會導致很多問題,與性能有關,否則會導致問題。

+0

感謝您的輸入:) – Zubzob 2013-03-21 23:53:41

相關問題