什么是常见的开发问题,陷阱和建议?

时间:2012-06-28 15:44:17

标签: node.js express

我一直在Node.js开发仅2周,并开始重新创建以前用PHP编写的网站。到目前为止一直这么好,看起来我可以在Node(使用Express)中做同样的事情,这是在相同或更短的时间内在PHP中完成的。

我遇到过你必须习惯的事情,比如使用模块,不共享公共环境的模块,养成使用回调进行文件系统和数据库操作的习惯等。

但开发人员可能会发现很多事情,这对节点中的开发非常重要吗?其他所有在Node中开发的问题都有,但直到以后它们才会出现?陷阱?专业知识和新手没有的东西吗?

我很感激任何建议和意见。

1 个答案:

答案 0 :(得分:19)

以下是您可能直到稍后才会意识到的事情:

  • 节点将暂停执行以最终/定期运行垃圾收集器。发生这种情况时,您的服务器将暂停打嗝。对于大多数人来说,这个问题不是一个重大问题,但它可能成为构建近期系统的障碍。请参阅Does Node.js scalability suffer because of garbage collection when under high load?
  • 节点是单进程,因此默认情况下只使用1个CPU。有内置的集群支持来运行多个进程(通常每个CPU 1个),并且在大多数情况下,Node社区认为这是一个可靠的方法。不过,你可能对这个现实感到惊讶。
  • 由于事件队列,堆栈跟踪经常丢失,因此您的日志记录和调试方法需要发生重大变化

以下是一些可能会遇到一些问题的小绊脚石(我仍然会碰到这些)

  • 记住要成功回调callback(null, value)。将null作为第一个参数传递是很奇怪的,因此我忘了这样做。相反,我不小心做callback(value),这被调用者解释为错误,直到我调试了一段时间并打了我的额头。
  • 在guard子句中调用回调时忘记使用return,并且不希望函数继续执行该点。有时这会导致回调被调用两次,从而导致各种不当行为。

以下是您最初可能无法实现的一些 NICE 事项

  • 使用其中一个非常棒的流控制库,node.js可以更轻松地执行复杂的操作,例如并行加载3个网络资源,然后串行进行2个DB调用,然后并行写入2个日志文件,然后发送HTTP响应。这个东西在节点上是微不足道和漂亮的,在许多同步环境中几乎不可能。
  • 所有节点的模块都是新的和现代的,在大多数情况下,您可以找到一个设计精美的模块,它具有出色的API,可以满足您的需求。 Python现在也有很棒的库,但是将Node的cheerio或jsdom模块与python的BeautifulSoup进行比较,看看我的意思。将python的requests模块与节点的superagent进行比较。
  • 通过与现代平台合作,人们专注于现代网络开发,可以获得社区效益。节点社区和PHP社区之间的对比不容小觑。