首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送套接字请求时浏览器内存泄漏

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

Stack Overflow用户
提问于 2017-10-23 19:06:04
回答 1查看 86关注 0票数 0

我尝试在服务器上发送websocket请求(socket.io)。请求从浏览器控制台发送。但是当我在浏览器中使用脚本时,我得到了内存泄漏。你会帮助避免内存泄漏,但节省脚本的生产力吗?代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2017-10-23 19:37:13

应该是这样的:

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46887845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档