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

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

当我使用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>

我想指出的是,这仅在返回ojit_code很大时才成为问题。它与大小直接相关,因为对于中等大小的结果,我可以看到适度的速度下降,只有几百条记录+被返回时,才可以看到严重的速度下降。

最佳答案


$("#result-div").html(data);
html()利用jQuery的empty方法,该方法非常有效以防止内存泄漏。

你有没有尝试过:
delete data;

我认为您的代码中还有其他性能问题,导致性能缓慢。您的返回数据是否使用具有Alpha透明度的png?我已经看到杀死IE6(应用了Alpha滤镜时)并大大降低了IE7的速度。

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

10-09 19:06
查看更多