我有一个Web应用程序,每秒执行一次ajax调用以刷新页面的状态 我遇到了IE7和jQuery(1.7.1)ajax调用的严重内存泄漏问题。
为了测试内存泄漏,我创建了一个html测试页面,它所做的就是在文档就绪时运行“refreshState”函数。
除了进行ajax调用之外,“refreshState”函数没有太大作用 设置下次函数将通过setTimeOut函数运行。
<script type="text/javascript">
var url = "http://localhost/QuotesService/QuotesService.svc/GetModel";
function refreshState() {
$.ajax({
url: url,
cache: false,
dataType: "json",
success: function (data) {
//refresh page data(wasn't activated while testing for memory leaks)
data = null;
}
});
setTimeout(function () { refreshState() }, 1000);
}
$(document).ready(function () {
refreshState();
});
</script>
有没有更好的方法来实现这个消除内存泄漏的功能?
由于 IDO
答案 0 :(得分:0)
除非它非常必要,否则它每秒都很敏锐,也许它有助于将setTimeout放入jQuery成功函数中。这样一来,如果其中一个“堵塞”,你就可以避免同时进行太多的Ajax调用。如果您决定使用此功能,我还建议您添加错误功能,该功能也会设置超时。这样一个错误不会打破循环,它可以“重启”。
答案 1 :(得分:0)
我认为泄漏是由于AJAX调用时间超过1秒,因此每个调用都在堆叠。
你真的需要每秒更新吗?以5或10秒的间隔尝试它,并添加interval - 1
超时(下面的示例)。我打赌你的记忆问题会消失。
此外,我会在您的AJAX中添加一个error
处理程序,以便您可以更好地监控AJAX调用的任何问题。
function refreshState() {
$.ajax({
url: url,
cache: false,
dataType: "json",
timeout: 9000, // 9s timeout
success: function (data) {
//refresh page data(wasn't activated while testing for memory leaks)
data = null;
},
error: function(xhr, status, error) {
console.log(status + " : " + error)
}
});
setTimeout(refreshState, 10000); // 10s interval
}