Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Ajax请求后释放内存_Javascript_Ajax_Memory_Browser_Memory Leaks - Fatal编程技术网

Javascript 如何在Ajax请求后释放内存

Javascript 如何在Ajax请求后释放内存,javascript,ajax,memory,browser,memory-leaks,Javascript,Ajax,Memory,Browser,Memory Leaks,我的网站上有一个非常基本的ajax幻灯片。在每个滚动条上,新图像和响应内容不断增加浏览器使用的内存量 我已经做了研究,并尝试了所有建议,在每个新请求上重置XHR对象,但这绝对没有帮助 幻灯片是基本的,但可能包含数百张幻灯片。我希望用户能够无限期地浏览幻灯片,而不会使浏览器崩溃。这可能吗 谢谢,Brian如果是幻灯片,你一次只显示一张图片吗?如果你一次只显示一个,而你从来没有摆脱你显示的最后一个,它总是会增加记忆。如果删除未显示的幻灯片,应该会有所帮助。如果是幻灯片放映,一次是否只显示一张图像?如

我的网站上有一个非常基本的ajax幻灯片。在每个滚动条上,新图像和响应内容不断增加浏览器使用的内存量

我已经做了研究,并尝试了所有建议,在每个新请求上重置XHR对象,但这绝对没有帮助

幻灯片是基本的,但可能包含数百张幻灯片。我希望用户能够无限期地浏览幻灯片,而不会使浏览器崩溃。这可能吗


谢谢,Brian如果是幻灯片,你一次只显示一张图片吗?如果你一次只显示一个,而你从来没有摆脱你显示的最后一个,它总是会增加记忆。如果删除未显示的幻灯片,应该会有所帮助。

如果是幻灯片放映,一次是否只显示一张图像?如果你一次只显示一个,而你从来没有摆脱你显示的最后一个,它总是会增加记忆。如果删除未显示的幻灯片,应该会有所帮助。

增加内存使用是正常的。毕竟,您每次都在加载更多的数据——来自AJAX响应的HTML以及正在显示的图像。除非您使用的是AdobePageMill生成的HTML,否则只会有几百字节的HTML/文本。图像将占据大部分空间。所有东西都被塞进浏览器的缓存中

由于您不直接使用DOM(构建子树等等),只需重复替换一块HTML,最终浏览器将进行清理,并从内存/缓存中丢弃一些未使用的/旧的/过时的图像数据,并回收一些内存

现在,如果您正在执行一些高度复杂的DOM操作,并动态生成许多新节点,并且在此处或那里泄漏一些节点,那么您将遇到内存问题,因为这些泄漏的节点最终将掩埋浏览器


但是,仅仅通过加载图像来增加内存使用并不需要担心,这就像一个正常的扩展冲浪会话,除了加载一些新图片。

增加内存使用是正常的。毕竟,您每次都在加载更多的数据——来自AJAX响应的HTML以及正在显示的图像。除非您使用的是AdobePageMill生成的HTML,否则只会有几百字节的HTML/文本。图像将占据大部分空间。所有东西都被塞进浏览器的缓存中

由于您不直接使用DOM(构建子树等等),只需重复替换一块HTML,最终浏览器将进行清理,并从内存/缓存中丢弃一些未使用的/旧的/过时的图像数据,并回收一些内存

现在,如果您正在执行一些高度复杂的DOM操作,并动态生成许多新节点,并且在此处或那里泄漏一些节点,那么您将遇到内存问题,因为这些泄漏的节点最终将掩埋浏览器


但是,仅仅通过加载图像来增加内存使用并不需要担心,它就像一个普通的扩展冲浪会话,只是你只是加载一些新的图片。

你使用什么样的机制来加载图像?@timdev-ajax响应包含纯html,然后我使用.innerHTML将其放入DOM。您使用哪种机制加载图像?@timdev-ajax响应包含纯html,然后我使用.innerHTML将其放入DOM。目前,我只是通过innerHTML替换html内容,因此我不确定这是否算是正式删除它。用javascript正式删除DOM节点会像您描述的那样吗?我认为您不需要释放XHR对象,它不会节省很多内存。事实上,尝试在所有通话中使用同一个。这里消耗内存的似乎是每页显示的内容量不断增加。你应该试着一次只保留3个:t-1,t,t+1。从理论上讲,通过innerHTML用新内容替换旧内容应该会删除旧资源——确保不会意外地将它们存储在字符串变量或其他引用中。我会尝试将内容交换放在一个范围有限的函数中,这样每次函数退出时,内存都会被释放。目前我只是通过innerHTML替换HTML内容,所以我不确定这是否算是正式删除它。用javascript正式删除DOM节点会像您描述的那样吗?我认为您不需要释放XHR对象,它不会节省很多内存。事实上,尝试在所有通话中使用同一个。这里消耗内存的似乎是每页显示的内容量不断增加。你应该试着一次只保留3个:t-1,t,t+1。从理论上讲,通过innerHTML用新内容替换旧内容应该会删除旧资源——确保不会意外地将它们存储在字符串变量或其他引用中。我会尝试将内容交换放在一个范围有限的函数中,这样每次退出该函数时,内存都会被释放。