Javascript可能内存泄漏

时间:2016-02-11 13:20:02

标签: javascript jquery memory-leaks

我有以下javascript代码,循环浏览我服务器上的多个页面(用于数字标牌)。

此代码用于所有页面,并且(此刻)每3秒循环一次页面(请参阅超时)。但是,浏览器的内存使用率会缓慢但稳定地上升。 2小时后,它从使用的192mb变为436mb。由于这是在Raspberry pi上,只有512mb内存专用于cpu,因此不太实用。

此代码中是否有明显的内存泄漏?我自己不是专家,但由于这些东西每天运行8-12小时,我可能会说20分钟/分钟,所以+/- 9600-14400每天重新加载。更多,如果它没有关闭..

$(document).ready(function() {
    versionPage = parseInt(document.getElementById("version").innerHTML);
    versionServer = 0
    urls = 0;
    getVersion();
    currentPage = getPage();
    getContent();
    main();

    function getPage() {
        page = window.location.href.split("/");
        return page[page.length-1];
    }

    function getVersion() {
        $.ajax({
            url: "http://localhost/getVersion",
            type: "GET",
            dataType: "json",
            success: function(json) {
                console.log("json" + json);
                versionServer = json;
                if (versionServer != versionPage) {
                    console.log("Difference!");
                }
                else {
                    console.log("Same!");
                }
            },
       });

    }



    //saves how much urls there are
    function getContent() {
        $.ajax({
            url: "http://localhost/getContent",
            type: "GET",
            dataType: "json",
            success: function(json) {
                console.log(json);
                urls = json;
            },       
        });
    }


    //main function loop 
    function main() {
        //check version every 
        window.setInterval(function() {
            getVersion();
            if(versionServer != versionPage) {
                window.location.href = "http://localhost:5000/1"
            }
            if(urls != 1) {
                nextPage =(parseInt(currentPage) % urls) + 1;
                window.location.href = "http://localhost:5000/" + nextPage;

            }
        }, 3000);
    }
});

1 个答案:

答案 0 :(得分:1)

我不得不在评论中问你这个问题但需要“50声望”才能发表评论。

您是否尝试将代码放在外部Javascript文件中,例如“signagelooper.js”并按顺序放置您的页面。这样你的looper函数总是有一个实例在运行。如果这是你不想做的事,请纠正我。