簡體   English   中英

發送套接字請求時瀏覽器內存泄漏

[英]Browser memory leak while sending socket requests

我嘗試在服務器上發送websocket請求(socket.io)。 請求是從瀏覽器控制台發送的。 但是在瀏覽器中使用腳本時出現內存泄漏。 您是否可以幫助避免內存泄漏,但可以節省腳本效率? 碼:

var socket = new io;
var counter = 251;

function myNewFunction(data){   
try{
    var IDs = {"items": []};
    var arrayLength = data.items.length;
    var lables = [];
    for (var i = 0; i < arrayLength; i ++){
        if(data.items[i]["amount"] < 20){
            IDs["items"].push(data.items[i]["_id"]);
            lables.push(data.items[i]["amount"]);

}}}catch(err){}

if (IDs["items"].length > 0){
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "url", false);
    xhr.setRequestHeader("content-type", "application/json;charset=UTF-8");
    xhr.send(JSON.stringify(IDs));
    if (xhr.status == 200){
        for(var i = 0; i < lables.length; i ++){
            counter -= lables[i];}
        console.log("Left", counter);
    }}
}

setInterval(function(){
    socket.emit("/call/items", {page: 1, sort: 1, search: "", tags: ["1", "2", "3", "4"]}, function(e, data){myNewFunction(data)})
}, 100)

應該是這樣的:

var socket = new io;
var counter = 251;

function myNewFunction(data) {
    try {
        var IDs = {"items": []};
        var arrayLength = data.items.length;
        var lables = [];
        for (var i = 0; i < arrayLength; i ++) {
            if(data.items[i]["amount"] < 20) {
                IDs["items"].push(data.items[i]["_id"]);
                lables.push(data.items[i]["amount"]);
            }
        }
        if (IDs["items"].length > 0) {
            var xhr = new XMLHttpRequest();
            xhr.open("POST", "url", false);
            xhr.setRequestHeader("content-type", "application/json;charset=UTF-8");
            xhr.send(JSON.stringify(IDs));
            xhr.onreadystatechange = function () {
                if (xhr.status == 200){
                    for(var i = 0; i < lables.length; i ++){
                        counter -= lables[i];}
                    setTimeout(callItems, 100);
                }
            }
        } else {
            setTimeout(callItems, 100);
        }
    } catch(err) {
        setTimeout(callItems, 100);
    }
}

function callItems() {
    socket.emit(
        "/call/items",
        {page: 1, sort: 1, search: "", tags: ["1", "2", "3", "4"]},
        function (e, data) {
            myNewFunction(data)
        }
    );
}

callItems();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM