不同类型的可变范围会导致NodeJ中的内存泄漏吗?

时间:2017-08-30 05:22:55

标签: javascript node.js memory memory-leaks

我在我的节点js app中面临内存泄漏问题。我无法在此处发布代码,但我想知道这些内容是否会导致内存泄漏。这可以帮助我知道我可能在哪里做错了什么:

  1. 函数内的局部变量:
  2. e.g。

    window.onload = function() {
      // script for Smartsupp Live Chat
    
    };
    

    现在,如果我在POST 路线中调用此功能,则每次都会声明function Foo(){ var foo = {a: 'b'}; console.log(foo); } 。它是否释放内存或旧的var foo仍然在某个地方持有内存?我是否需要在函数的最后一个语句中明确地执行var foo之类的操作? (注意foo是一个对象。我也想知道它是一个整数还是字符串)。

    我想说的是这样的:

    foo = null
    1. 路线
    2. 这可能类似于1st,但我仍然想知道:

      app.post('/home', function (req, res) {
          Foo();
          res.end();
      });
      

      对于每个请求,我是否需要这样做:?

      app.post('/home', function (req, res) {
          var foo2 = 5;
          res.write("Something");
          res.end();
      });
      

      或者会自动释放吗?

      1. 如果您看到第二点,则此处未使用app.post('/home', function (req, res) { var foo2 = 5; res.write(foo2); foo2 = null; res.end(); }); 。我是否还需要 null 或(类似这样)来防止内存泄漏?

      2. 全局变量:

        var globalVar = 5; app.post(' / home',function(req,res){     glbalVar = globalVar + 1;     res.write("东西&#34);     重发(); });

      3. 这里,4和2之间的唯一区别是变量范围。我需要 null 这个变量还是覆盖它自己释放内存?

        编辑:

        正如所建议的那样,我在T.J.上阅读了原始问题的另一个答案。克劳德。它清除了一些东西给我,但我仍然怀疑我的第3点和第4点.3,req对象不是由我创建的,所以我需要它来制作req? 4,变量是全局的。它会遵循T.J所说的相同的事情吗?

        现在,随着一些事情被清除,我在这里再添加一个情况,即我在我的脚本中使用node-apn并跟随异步代码块:

        null

        我怎么称呼它是这样的:

        apnProvider.send(note, deviceToken).then( (result) => {
          // see documentation for an explanation of result
        });
        

        现在我的另一个问题是:T.J告诉我这个关闭的例子吗?由于我在等待我的通知异步函数的响应之前已经结束app.post('/home', function (req, res) { var data = {foo: req.body.bar}; // above object has all data required to send push notification sendNotification (data); res.end(); }); function sendNotification(data){ //other lines of code //I use data to get note, deviceToken apnProvider.send(note, deviceToken).then( (result) => { console.log(result); }); } ,这个闭包(如果是)会导致内存泄漏,因为它将保留我的{{1}对象?

0 个答案:

没有答案