Angularjs websocket服务内存泄漏

时间:2014-05-26 13:29:21

标签: javascript angularjs memory-leaks

在我的项目中,我有一个角度工厂,它将使用c ++应用程序处理websocket连接。

websocket工厂的结构:

.factory('SocketFactory', function ($rootScope) {
    var factory = {};

    factory.connect = function () {
        if(factory.ws) { return; }

        var ws = new WebSocket('ws://...');

        ws.onopen = function () {
            console.log('Connection to the App established');
        };

        ws.onerror = function () {
            console.log('Failed to established the connection to the App');
        };

        ws.onclose = function () {
            console.log('Connection to the App closed');
        };

        ws.onmessage = function (message) {
            //do stuff here
        };
        factory.ws = ws;
    };

    factory.send = function (msg) {
        if(!factory.ws){ return; }
        if(factory.ws.readyState === 1) {
            factory.ws.send(JSON.stringify(msg));
        }
    };

    return factory;
});

c ++应用程序将通过websockets发送图像,它们将显示在画布中,每次收到新图像时都会更新。

一切正常,但是当我开始向浏览器发送图像时,我注意到在ubuntu的系统资源监视器中,每次ws.onMessage被激活时,chrome进程使用的内存不断增加+/- 5mb(大约)。

我评论了ws.onMessage中的代码,只留下了事件检测,没有其他内容,所使用的内存仍在增加,如果我评论整个ws.onMessage事件,则使用的内存保持在正常范围内。

您有什么建议可以解决这个问题吗?这是因为我应该使用$destroy来阻止这种循环吗?

1 个答案:

答案 0 :(得分:0)

事实证明这比我想象的要复杂一些。

首先,我没有使用上面显示的websocket服务,而是使用了这个:https://github.com/gdi2290/angular-websocket

内存泄漏仍然存在,但我注意到,在画布更新过程中,引用了一个没有被垃圾回收的imageObj.src

Chrome,opera和firefox似乎现在将使用的内存保持在合理的限制之内。