PubNub Javascript SDK内存泄漏

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

我正在使用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>

你好,普努布
你好
(功能(){
/* '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>