在我的通用反应应用程序中,我在setInterval
和 componentWillMount
中包含 clearInterval
的反应组件在componentWillUnmount
。
幸运的是,componentWillUnmount
未在服务器上调用。
componentWillMount(){
this.checker = setInterval(this.checkForSubscription, 2000);
}
componentWillUnmount(){
clearInterval(this.checker);
}
我在快递服务器上遇到崩溃和内存泄漏。我创建了heapdumps并在chrome memory工具上分析它们。
不幸的是,没有找到内存泄漏的成功。因此,当我通过检查setInterval
窗口对象来从服务器端逻辑中删除typeof
时。从那时起我就不会造成任何崩溃。所以,我想知道上面的代码是内存泄漏的原因,为什么?
答案 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尚未在服务器上调用。因此,它会导致服务器上的内存泄漏。
一旦我设置了对象存在的检查,它只在客户端调用。所以,从那时起没有服务器崩溃。