2

这个问题的公认答案中,这个家伙建议不要使用抛出异常的域,因为他说,这会导致内存泄漏和不稳定。但这是我打算使用域的方式。现在我很困惑。他是对的吗?

4

2 回答 2

3

该答案断言不同,不能保证它导致内存泄漏和不稳定。但是很难保证您可以处理异常而不会导致内存泄漏和不稳定。

我相信异常处理混乱的核心源于 Node.js 文档中的这个措辞:

由于 throw 在 JavaScript 中的工作原理,几乎没有任何方法可以安全地“从上次中断的地方继续”,而不会泄漏引用或创建其他类型的未定义脆弱状态。

响应抛出错误的最安全方法是关闭进程。

http://nodejs.org/api/domain.html

实际上,JavaScript 并没有什么特别之处可以让异常变得特别危险。事实是,异常在任何语言中都有潜在的危险。关键是要仔细考虑您的应用程序会导致什么副作用,以及如果中途停止,您是否正在做任何可能危险的事情(提示:您可能是)。

Joyent的这份设计指南区分了“程序员错误”和“操作错误”。在回答您的问题时,本指南主张不处理程序员错误(包括读取未定义的属性),并断言由于域process.on('uncaughtException')主要针对此类错误,因此应该避免它们。

于 2014-11-18T00:38:05.123 回答
0

我认为使用域的最佳方法是找出错误。我还建议至少每几个小时重新启动一次 nodejs 进程。并使用集群,所以我们有许多 nodejs 项目在同一个端口上共享和服务。

于 2014-11-06T19:14:54.520 回答