PubNub Javascript SDK内存泄漏
我正在使用pubnub处理我正在处理的应用程序前端的实时更新。用户已经经历了很多浏览器崩溃,特别是在windows chrome上。我运行了chrome profiler,发现pubnub一直在创建事件侦听器,直到浏览器最终运行了大量内存并崩溃。有没有办法手动清理pubnub创建的事件侦听器,或者其他解决方法 编辑 我也尝试过切换到websockets版本,问题变得更糟PubNub Javascript SDK内存泄漏,javascript,memory-leaks,pubnub,Javascript,Memory Leaks,Pubnub,我正在使用pubnub处理我正在处理的应用程序前端的实时更新。用户已经经历了很多浏览器崩溃,特别是在windows chrome上。我运行了chrome profiler,发现pubnub一直在创建事件侦听器,直到浏览器最终运行了大量内存并崩溃。有没有办法手动清理pubnub创建的事件侦听器,或者其他解决方法 编辑 我也尝试过切换到websockets版本,问题变得更糟 <!DOCTYPE html> <html> <head> <meta cha
<!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>
你好,普努布
你好
(功能(){
/* 'wss://ORIGIN/PUBLISH_KEY/SUBSCRIBE_KEY/CHANNEL' */
WebSocket=publinub.ws;
var套接字=新的WebSocket('wss://pubsub.pubnub.com/PUB/SUB/CHANNEL')
//消息接收时
socket.onmessage=函数(evt){
log('socketreceive');
控制台日志(evt.data);
}
//在插座关闭时
socket.onclose=函数(){
console.log('socketclosed');
}
//论错误
socket.onerror=函数(){
log(“套接字错误”);
}
//关于建立联系
socket.onopen=功能(evt){
log(“套接字打开”);
//发送消息!
send('hello world!');
}
//发送完成后
socket.onsend=函数(evt){
log('socketsend');
控制台日志(evt);
}
控制台日志(套接字)
})();
编辑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>
你好,普努布
你好
(功能(){
/* 'wss://ORIGIN/PUBLISH_KEY/SUBSCRIBE_KEY/CHANNEL' */
WebSocket=publinub.ws;
var套接字=新的WebSocket('wss://pubsub.pubnub.com/PUB/SUB/CHANNEL')
//消息接收时
socket.onmessage=函数(evt){
}
//在插座关闭时
socket.onclose=函数(){
}
//论错误
socket.onerror=函数(){
}
//关于建立联系
socket.onopen=功能(evt){
//发送消息!
send('hello world!');
}
//发送完成后
socket.onsend=函数(evt){
}
})();
使用PubNub JavaScript SDK测试系统利用率和内存配置文件
您正在使用浏览器调试控制台测量JS堆。很不错的!这没关系,但你必须做出调整。测试中需要解决的一个重要问题是注意console.log(…)
将导致内存膨胀。这是一个普遍的问题-
对于将来的测试,请确保排除代码中任何地方的所有执行
上面的编辑包含多行console.log()
行,它们将强调内存气球效应
内存分析的更新
我目前正在ChromeWeb浏览器中运行以下测试,使用与您最初的stackoverflow帖子中相同的时间线内存监控方法
<script src="https://cdn.pubnub.com/pubnub-dev.js"></script>
<script>(function(){
WebSocket = PUBNUB.ws;
var socket = new WebSocket('wss://pubsub.pubnub.com/demo/demo/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) {}
// On Send Complete
socket.onsend = function(evt) {}
})();</script>
console.log
问题与JavaScript内存分析工作
这里有一个要点,我们正在使用它来产生相同的问题,没有我们已经发现的解决方法,但是我们以前从未见过任何内存泄漏,直到这次才有报告。工程部目前正在对此进行审查,我们将报告结果。编辑您的代码以使用指向SDK最新版本的代码。您正在使用的上述版本指向v3.6.7-我们将很快弃用该CDN。感谢您的回答,如编辑中所述,我已删除console.logs并重新测试。我使用的原始代码是从pubnub.com/websockets链接上的pubnub文档复制粘贴的。对于如此简单的代码是如何导致堆稳步增加的,我有点困惑。但是删除控制台语句解决了这个问题,对吗?不过,您要问的问题通常是针对浏览器应用程序的。上面的Edit 2已删除所有console.log,但仍会产生相同的效果。我也会运行测试,并稍后发布更新。skype:blum.stephen或电子邮件stephen@pubnub.com这样我们就可以了解细节了。我的chrome版本是45.0.2454.85(64位)。JS lib
publinub-dev.JS
是v3.7.14
(与您正在使用的版本相同),并且始终是最新版本。它应该被称为pubnub-latest.js
,但我们将其标记为pubnub-dev.js
,以警告它是一个不断变化的版本。如果你能和我联系,我可能会给你另一个选择stephen@pubnub.com
<script>
setInterval(function(){
console.log({a:document,b:window,c:document.body})
},100)
</script>