【问题标题】:jQuery global events and performance?jQuery 全局事件和性能?
【发布时间】:2011-03-10 22:00:23
【问题描述】:

我正在寻找一种使用 jQuery 显示状态指示器的方法,我在 jQuery Cookbook 中找到了一个解决方案,它显示了这个解决方案

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

        .....
  })(jQuery);

然后它警告,

如果您在应用程序中遇到性能问题,可能是因为 如果存在非常大的事件传播成本 元素的数量。在这种情况下,将 global 设置为 false 可能会给您 性能提升。

所以首先我应该使用上面显示的解决方案,随着我的网站和 js 代码变得越来越大,这是否会成为性能问题?

我应该避免 jQuery 全局事件,就像段落中说的那样将其关闭吗?

最后,你们如何在执行 ajax 请求时显示一个简单的指示器?

【问题讨论】:

    标签: performance jquery activity-indicator


    【解决方案1】:

    老实说,我认为这种谨慎有效,但同时也过时了。在此处查看 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);
    

    所以它不会像以前那样触发 每个 元素,这使得大量警告元素成为一个非常现实的问题,而是循环遍历已注册的元素或事件,并且仅当任何都已注册,所以现在性能好多了


    对于您的问题:

    那么首先我应该使用上面显示的解决方案吗?随着我的网站和 js 代码越来越大,这是否会成为性能问题?

    是的,上面的解决方案很好,在我上面概述的全局事件优化之后,我还没有看到一个足够大的页面来解决这个问题。

    我应该避免 jQuery 全局事件,就像段落中说的那样关闭它吗?

    不,您几乎可以忽略该段落在创建 this change 之后使用任何 jQuery。

    最后,你们如何在执行 ajax 请求时显示一个简单的指示器?

    和你的问题一样:)

    【讨论】:

    • 非常感谢尼克!确实,我参考的那本书是去年写的。很高兴知道事情有所改善,我将使用该解决方案。谢谢。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多