2010-07-02 54 views
3

我是在搜索的方式使用jQuery顯示狀態指示器,我發現在jQuery的食譜的解決方案,這表明該解決方案jQuery全球事件和性能?

(function($) { 
    $(document).ready(function() { 
     $('#ajaxStatus') 
     .ajaxStart(function() { 
      $(this).show(); 
     }) 
     .ajaxStop(function() { 
      $(this).hide(); 
     }); 

     ..... 
    })(jQuery); 

則提醒,

如果遇到性能問題在您的應用程序中,這可能是因爲 的事件傳播的成本,如果有一個顯着大的元素數量 。在這種情況下,將全局設置爲false可能會使您的性能得到提升。

因此,首先我應該使用上面顯示的解決方案,這將是一個性能問題,因爲我的網站和js代碼變得越來越大?

我應該避免jQuery全局事件,就像段落說的那樣關掉它?

最後,你們如何在ajax請求執行時顯示一個簡單的指標?

回答

9

老實說,我認爲這個警告是有效,但同時過時了。看看jQuery的源位置:http://github.com/jquery/jquery/blob/master/src/event.js#L290

它顯示了一個全球性的事件是如何現在處理:

if (jQuery.event.global[ type ]) { 
    jQuery.each(jQuery.cache, function() { 
    if (this.events && this.events[type]) { 
     jQuery.event.trigger(event, data, this.handle.elem); 
    } 
    }); 
} 

使用是:

jQuery("*").add([window, document]).trigger(type, data); 

,所以它不是觸發元素像它過去一樣,這使得大量的元素警告一個非常真實的關注,它反而在eleme上循環nts已註冊或事件,並且只有任何已經註冊,所以它的性能現在更好。


對於您的問題:

首先,我應該使用的解決方案表現出上方,這將是一個性能問題,因爲我的網站和JS代碼變得越來越大?

是的,上面的解決方案很好,我還沒有看到一個足夠大的頁面,因爲這是一個問題,在我上面概述的全局事件優化之後。

我應該避免jQuery全局事件,就像段落說的關掉它?

不,你幾乎可以忽略該段落使用任何jQuery後this change作出。

最後,你們如何顯示一個簡單的指標,而ajax請求正在執行?

完全一樣,你有你的問題:)

+0

太感謝你了尼克!的確,我引用的書是去年寫的。很高興知道改進之後,我會使用解決方案。謝謝。 – 2010-07-02 04:11:47