使用jquery ajax调用时IE7内存泄漏

时间:2012-02-19 15:46:39

标签: jquery ajax memory settimeout memory-leaks

我有一个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

2 个答案:

答案 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
}
相关问题