【发布时间】:2015-01-03 09:50:48
【问题描述】:
在对this question 的接受回答中,该人建议不要使用会引发异常的域,因为他说,这会导致内存泄漏和不稳定。但这是我打算使用域的方式。现在我很困惑。他说的对吗?
【问题讨论】:
在对this question 的接受回答中,该人建议不要使用会引发异常的域,因为他说,这会导致内存泄漏和不稳定。但这是我打算使用域的方式。现在我很困惑。他说的对吗?
【问题讨论】:
与that answer 断言不同,不能保证它会导致内存泄漏和不稳定。但很难保证您可以处理异常而不会导致内存泄漏和不稳定。
我认为,异常处理混乱的核心源于 Node.js 文档中的以下措辞:
由于 throw 在 JavaScript 中的工作原理,几乎没有任何方法可以安全地“从上次中断的地方继续”,而不会泄漏引用或创建其他类型的未定义脆弱状态。
响应抛出的错误最安全的方法是关闭进程。
http://nodejs.org/api/domain.html
实际上,JavaScript 并没有什么特别之处可以让异常变得特别危险。事实上,异常在任何语言中都有潜在的危险。关键是要仔细考虑您的应用程序会导致什么副作用,以及如果中途停止,您是否正在做任何可能危险的事情(提示:您可能是)。
This design guide from Joyent 区分“程序员错误”和“操作错误”。在回答您的问题时,本指南主张不要处理程序员错误(包括读取 undefined 的属性),并断言由于 Domains 和 process.on('uncaughtException') 主要针对此类错误,因此应该避免它们。
【讨论】:
cluster 模块结合使用,并且每次发生错误时,只需停止工作程序并生成一个新的。
我认为使用域的最佳方法是找出错误。我还建议至少每几个小时重新启动一次 nodejs 进程。并使用集群,所以我们有许多 nodejs 项目在同一个端口上共享和服务。
【讨论】: