【问题标题】:IE7 memory leak when using jquery ajax calls使用 jquery ajax 调用时 IE7 内存泄漏
【发布时间】:2023-03-27 09:59:02
【问题描述】:

我有一个 Web 应用程序,它每秒执行一次 ajax 调用以刷新页面的状态 我在 IE7 和 jQuery(1.7.1) ajax 调用中遇到了严重的内存泄漏问题。

为了测试内存泄漏,我创建了一个 html 测试页面,它所做的只是在文档就绪时运行“refreshState”功能。

“refreshState”函数除了调用 ajax 和 通过 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>

有没有更好的方法来实现这个功能来消除内存泄漏?

谢谢 伊多

【问题讨论】:

  • 您使用的是最新的 jQuery 版本吗?
  • 请定义“内存泄漏”。提高内存使用率不是泄漏。
  • 您确实必须描述您如何确定存在内存泄漏。您做了哪些确切的测试来确定存在内存泄漏?由于浏览缓存、内存池的一般使用等原因,内存在多个 ajax 调用中增加一些(达到一定限度)是正常的......
  • 内存无限增加所以我猜是内存泄漏

标签: jquery ajax memory settimeout memory-leaks


【解决方案1】:

我应该想象泄漏是由于 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
}

【讨论】:

  • 感谢您的快速回复。
  • 感谢您的快速回复。我确实需要每隔 1 秒更新一次。我已经检查过了,通话需要几毫秒。 ajax调用结束时是否有可能没有清理jquery ajax函数本身中的某些内容
【解决方案2】:

除非非常必要,否则它每秒钟都清晰,也许它有助于将 setTimeout 放入 jQuery 成功函数中。这样可以避免同时有太多的 Ajax 调用,以防其中一个“阻塞”。如果您决定使用此功能,我还建议您添加错误功能,该功能也会设置超时。这样一来,错误就不会中断循环,并且能够“自行重启”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2012-10-25
    • 2023-04-08
    相关资源
    最近更新 更多