我有一个带有链接下拉菜单的页面。从第一个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/