jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了简单的jQuery Ajax调用泄漏内存在Internet Explorer大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@我创建了一个网页,每秒进行一次Ajax调用。在Internet Explorer 7中,它泄漏内存不足(在大约15分钟内20 MB)。

程序很简单。它只是运行一个JavaScript函数,使Ajax调用。服务器返回一个空字符串,JavaScript代码不执行任何操作。我使用setTimeout每秒运行函数,我使用Drip来观看的东西。

这里是源:

<html>
  <head>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load('jquery','1.4.2');
      google.load('jqueryui','1.7.2');
    </script>
    <script type="text/javascript">
      setTimeout('testJunk()',1000);
      function testJunk() {
        $.ajax({ url: 'http://xxxxxxxxxxxxxx/test',// The url returns an empty String
                 dataType: 'html',success: function(data){}
               });
        setTimeout('testJunk()',1000)
      }
    </script>
  </head>
  <body>
    Why is memory usage going up?
  </body>
</html>

如何堵塞这个漏洞?我有一个真正的应用程序,以这种方式更新大表,但无人看管,它会吃掉千兆字节的内存。

编辑:好吧,所以经过一些好的建议,我修改代码为:

<html>
  <head>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load('jquery','1.7.2');
    </script>
    <script type="text/javascript">
      setTimeout(testJunk,success: function(data){setTimeout(testJunk,1000)}
               });
      }
    </script>
  </head>
  <body>
    Why is memory usage going up?
  </body>
</html>

它似乎没有任何区别,但。我不对DOM做任何事情,如果我注释掉Ajax调用,内存泄漏停止。所以看起来泄漏是完全在Ajax调用。 jQuery Ajax本质上创建某种循环引用,如果是这样,我如何释放它?顺便说一句,它不会在Firefox中泄漏。

有人建议在另一个VM中运行测试,看看结果是否相同。而不是设置另一个虚拟机,我发现一台笔记本电脑运行XP Home与Internet Explorer 8.它表现出同样的问题。

我尝试一些旧版本的jQuery,并得到更好的结果,但问题没有完全消除,直到我放弃了Ajax在jQuery和更传统(和丑陋)Ajax。

解决方法

这里是一个 link的bug,在jQuery,以及作为一个建议的修复jQuery 1.4.2:
--- jquery-1.4.2.js     2010-04-08 12:10:20.000000000 -0700
+++ jquery-1.4.2.js.fixed       2010-04-08 12:10:38.000000000 -0700
@@ -5219,7 +5219,7 @@

                            // Stop memory leaks
                            if ( s.async ) {
-                                       xhr = null;
+                                       xhr.onreadystatechange = null; xhr.abort = null; xhr = null;
                            }
                    }
            };

注意:这是官方修正在jQuery 1.4.4,所以你最好的打赌是只是立即升级

大佬总结

以上是大佬教程为你收集整理的简单的jQuery Ajax调用泄漏内存在Internet Explorer全部内容,希望文章能够帮你解决简单的jQuery Ajax调用泄漏内存在Internet Explorer所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。