简体   繁体   English

发送套接字请求时浏览器内存泄漏

[英]Browser memory leak while sending socket requests

I try to send websocket requests (socket.io) on server. 我尝试在服务器上发送websocket请求(socket.io)。 The requests are sent from browser console. 请求是从浏览器控制台发送的。 But I get memory leak while using the script in browser. 但是在浏览器中使用脚本时出现内存泄漏。 Would you help to avoid memory leak, but to save script productivity? 您是否可以帮助避免内存泄漏,但可以节省脚本效率? Code: 码:

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)

It should be like this: 应该是这样的:

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