React Server端+ Nodejs setInterval内存泄漏

时间:2017-12-25 15:27:27

标签: javascript node.js reactjs express memory-leaks

在我的通用反应应用程序中,我在setInterval componentWillMount 中包含 clearInterval 的反应组件在componentWillUnmount

幸运的是,componentWillUnmount未在服务器上调用。

componentWillMount(){
    this.checker = setInterval(this.checkForSubscription, 2000);
}

componentWillUnmount(){
    clearInterval(this.checker);
}

我在快递服务器上遇到崩溃和内存泄漏。我创建了heapdumps并在chrome memory工具上分析它们。

不幸的是,没有找到内存泄漏的成功。因此,当我通过检查setInterval窗口对象来从服务器端逻辑中删除typeof时。从那时起我就不会造成任何崩溃。所以,我想知道上面的代码是内存泄漏的原因,为什么?

2 个答案:

答案 0 :(得分:0)

您可以安全地将方法迁移到未在服务器上调用的componenDidMount

componentDidlMount(){
    this.checker = setInterval(this.checkForSubscription, 2000);
}

componentWillUnmount(){
    clearInterval(this.checker);
}

您还可以使用更多的软件包,例如can-use-dom

import canUseDOM from 'can-use-dom';
componentWillMount(){
    canUseDOM && this.checker = setInterval(this.checkForSubscription, 2000);
}

componentWillUnmount(){
    clearInterval(this.checker);
}

如果您使用的是webpack,则可以在config

中定义一个env变量
   new webpack.DefinePlugin({
      'process.env': {
        BROWSER: JSON.stringify(true),
      },
    }),

并使用条件process.env.BROWSER && "your code"

答案 1 :(得分:0)

我发现它是我自己的。上述代码的问题在于它无法在服务器端调用 dut ,因为componentWillUnmount尚未在服务器上调用。因此,它会导致服务器上的内存泄漏。

一旦我设置了对象存在的检查,它只在客户端调用。所以,从那时起没有服务器崩溃