Javascript JQuery find()赋值导致高内存消耗(IE.11和Firefox),而不是Chrome

Javascript JQuery find()赋值导致高内存消耗(IE.11和Firefox),而不是Chrome,javascript,jquery,ajax,memory-leaks,selector,Javascript,Jquery,Ajax,Memory Leaks,Selector,我已经在论坛上进行了一次可靠的搜索,找不到我目前遇到的问题的答案 提前感谢收到的任何建议 我在使用Firefox(49.02)和IE.11时遇到了内存消耗高的问题 我有一个应用程序,它使用setTimeout触发一个AJAX调用,该调用反过来触发一个附加到上下文对象的自定义事件处理程序。将返回的数据传递到实用程序更新方法setTimeout被删除,然后通常每隔20秒以所需的时间部分重置 返回的文档相当大,可能是5/10MB,具体取决于客户端数据 在隔离处理程序方法中,数据作为参数传入。我们指定H

我已经在论坛上进行了一次可靠的搜索,找不到我目前遇到的问题的答案

提前感谢收到的任何建议

我在使用Firefox(49.02)和IE.11时遇到了内存消耗高的问题

我有一个应用程序,它使用
setTimeout
触发一个AJAX调用,该调用反过来触发一个附加到上下文对象的自定义事件处理程序。将返回的数据传递到实用程序更新方法
setTimeout
被删除,然后通常每隔20秒以所需的时间部分重置

  • 返回的文档相当大,可能是5/10MB,具体取决于客户端数据
  • 在隔离处理程序方法中,数据作为参数传入。我们指定HTML模板的数据表示形式。到局部变量

    1. var contentTemplate = data.content; (returned from an AJAX call)
    
    然后,我们使用find将文档的一部分定位并分配为JQuery对象

    var body = $(contentTemplate).find("#maincontent");
    
    在每次settimeout迭代之后,会再次调用handler方法,并传入一个新的AJAX数据对象,然后再次开始赋值

    在上一次分配的每次迭代之后,内存将增加,直到浏览器达到其内存限制

    评出

    var body = $(contentTemplate).find("#maincontent");
    
    高消耗停止了。应用程序的任何其他部分都没有泄漏,没有循环引用或关闭问题

    作为handler方法中的测试,我创建了一个大数据结构,并将其分配给一个局部变量。没有观察到内存使用的增加。有一点,但GC很快就回收了

    var a = new Array(100000).join('azazazazazaza');
    
    我尝试在选择器上使用empty和remove,但没有任何效果

    我理解
    .html()
    在分配变量时,JQuery管理其内部缓存

    我们不能做下面的表达式

    var body = $(contentTemplate).find("#maincontent").html();
    
    有人知道这里的问题是什么吗。JQuery以某种方式兑现了选择器。在DOM中,节点在每次迭代后都会不断增加,但在页面上只能看到最后分配的集合

    我可以编写一些简单的JavaScript来解析模板,并提取出我需要的文档区域,但我更愿意使用JQuery作为脚本其余部分的使用工具

    我有问题。错过了一些愚蠢的事情,但我已经用尽了所有渠道


    谢谢

    很遗憾,我没有答案给你,但我对答案感兴趣!我想您已经确定是操作的
    find
    而不是jquery html解析
    $()
    部分导致了泄漏?我确定是find导致了问题,使用以下符号var contentTemplate=$(data.content)编写选择器。find(#maincontent”).html();仍然会导致泄漏。我会继续挖掘直到我得到答案,然后我会把它贴回来。谢谢你看。请原谅我上次的帖子。你说得对,只是将返回的数据包装在选择器中就会导致问题。看起来此人当时遇到了相同的问题-他们从未找到完美的答案,但他们确实找到了解决方法!谢谢,我现在读这篇文章。很遗憾,我没有答案给你,但我对答案感兴趣!我想您已经确定是操作的
    find
    而不是jquery html解析
    $()
    部分导致了泄漏?我确定是find导致了问题,使用以下符号var contentTemplate=$(data.content)编写选择器。find(#maincontent”).html();仍然会导致泄漏。我会继续挖掘直到我得到答案,然后我会把它贴回来。谢谢你看。请原谅我上次的帖子。你说得对,只是将返回的数据包装在选择器中就会导致问题。看起来此人当时遇到了相同的问题-他们从未找到完美的答案,但他们确实找到了解决方法!谢谢,我现在读这个。