【发布时间】:2015-09-12 03:33:38
【问题描述】:
我正在使用 pubnub 来处理我正在开发的应用程序前端的实时更新。用户已经经历了很多浏览器崩溃,特别是在 windows chrome 上。我运行了 chrome profiler,发现 pubnub 不断地创建事件监听器,直到最终浏览器运行我们的内存并崩溃。有没有办法手动清理由 pubnub 创建的事件侦听器,或任何其他解决方法?
编辑 我也试过切换到 websockets 版本,问题变得更糟了。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello Punub</title>
<script src="https://pubnub.a.ssl.fastly.net/pubnub.min.js"></script>
</head>
<body>
<h1>Hello</h1>
</body>
<!-- Import PubNub Core Lib -->
<!-- Use WebSocket Constructor for a New Socket Connection -->
<script>(function() {
/* 'wss://ORIGIN/PUBLISH_KEY/SUBSCRIBE_KEY/CHANNEL' */
WebSocket = PUBNUB.ws;
var socket = new WebSocket('wss://pubsub.pubnub.com/PUB/SUB/CHANNEL')
// On Message Receive
socket.onmessage = function(evt) {
console.log('socket receive');
console.log(evt.data);
}
// On Socket Close
socket.onclose = function() {
console.log('socket closed');
}
// On Error
socket.onerror = function() {
console.log('socket error');
}
// On Connection Establish
socket.onopen = function(evt) {
console.log('socket open');
// Send a Message!
socket.send('hello world!');
}
// On Send Complete
socket.onsend = function(evt) {
console.log('socket send');
console.log(evt);
}
console.log(socket)
})();</script>
</html>
EDIT 2我已经使用以下代码重新运行分析器
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello Punub</title>
<script src="https://pubnub.a.ssl.fastly.net/pubnub.min.js"></script>
</head>
<body>
<h1>Hello</h1>
</body>
<!-- Import PubNub Core Lib -->
<!-- Use WebSocket Constructor for a New Socket Connection -->
<script>(function() {
/* 'wss://ORIGIN/PUBLISH_KEY/SUBSCRIBE_KEY/CHANNEL' */
WebSocket = PUBNUB.ws;
var socket = new WebSocket('wss://pubsub.pubnub.com/PUB/SUB/CHANNEL')
// On Message Receive
socket.onmessage = function(evt) {
}
// On Socket Close
socket.onclose = function() {
}
// On Error
socket.onerror = function() {
}
// On Connection Establish
socket.onopen = function(evt) {
// Send a Message!
socket.send('hello world!');
}
// On Send Complete
socket.onsend = function(evt) {
}
})();</script>
</html>
【问题讨论】:
-
这是我们用来产生相同问题的要点,我们尚未发现任何解决方法gist.github.com/bevanhunt/f6e1007a0604a24c8089
-
我们之前从未见过任何内存泄漏,也没有任何报告,直到这次。工程部门目前正在对此进行审查,我们将报告结果。
-
编辑您的代码以使用指向最新版本 SDK 的 cdn.pubnub.com/pubnub-dev.js。您在上面使用的版本指向 v3.6.7 - 我们将很快弃用该 CDN。
标签: javascript memory-leaks pubnub