gpt4 book ai didi

javascript - 如何在 IE 中强制执行 Javascript 垃圾回收?在 AJAX 调用和 DOM 操作之后,IE 运行非常缓慢

转载 作者:可可西里 更新时间:2023-11-01 02:52:37 29 4
gpt4 key购买 nike

我有一个带有链式下拉菜单的页面。从第一个 select 选择一个 option 填充第二个,从第二个 select 选择一个 option 返回一个表在页面上的空 div 上使用 innerHtml 函数匹配结果。

问题是,一旦我做出选择并将大量数据带到页面上,页面上所有后续的 Javascript 运行都异常缓慢。似乎我通过 AJAX 拉回以填充 div 的所有数据仍在占用大量内存。我尝试在调用 innerHtml 后将包含 AJAX 结果的返回对象设置为 null 但没有成功。

当我使用 Javascript 向 DOM 中插入大量数据时,Firefox、Safari、Chrome 和 Opera 都没有表现出性能下降,但在 IE 中却非常明显。为了测试它是一个 Javascript/DOM 问题而不是一个普通的旧 IE 问题,我创建了一个在初始加载时返回所有结果的页面版本,而不是通过 AJAX/Javascript,并且发现 IE 没有性能问题。

仅供引用,我正在使用 jQuery 的 jQuery.get 方法来执行 AJAX 调用。

编辑这就是我正在做的:

<script type="text/javascript">
function onFinalSelection() {
var searchParameter = jQuery("#second-select").val();
jQuery.get("pageReturningAjax.php",
{SEARCH_PARAMETER: searchParameter},
function(data) {
jQuery("#result-div").get(0).innerHtml = data;
//jQuery("#result-div").html(data); //Tried this, same problem
data = null;
},
"html");
}
</script>

我想指出,只有当返回的 data 非常大时,这才会成为一个问题。它与大小直接相关,因为我能够看到中等大小结果的适度减速,只有几百条记录 + 被返回时才会出现严重减速。

最佳答案

您可以使用 CollectGarbage 函数在 IE 中强制进行垃圾回收,例如

if (typeof(CollectGarbage) == "function")
CollectGarbage();

此博客条目中详细描述了 JScript 垃圾收集器:http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx

正如博客所说,GC是不可预测的,所以delete datadata = null不会立即回收内存,但是它最终会回收它。


但我怀疑你的性能损失是否真的是由内存使用引起的;我认为这是 DOM 渲染的问题。

关于javascript - 如何在 IE 中强制执行 Javascript 垃圾回收?在 AJAX 调用和 DOM 操作之后,IE 运行非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2760285/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com