什么是共同的发展问题,陷阱和build议?

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

我遇到了一些你不得不习惯的东西,例如使用模块,不共享公共环境的模块,以及习惯使用callback进行文件系统和数据库操作等。

但是有没有什么开发人员可能会发现很多,这对节点的开发非常重要? 其他人都在Node开发的问题,但是直到后来才出现。 陷阱? 专业知识和新手什么都不?

我将不胜感激任何build议和意见。

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

  • 节点将暂停执行以最终/定期运行垃圾收集器。 发生这种情况时,服务器将暂停打嗝。 对于大多数人来说,这个问题不是一个重大的问题,但它可能是构build近期系统的障碍。 请参阅Node.js的可伸缩性是否因高负载下的垃圾回收而受到影响?
  • 节点是单个进程,因此默认情况下将只使用1个CPU。 有内置的集群支持来运行多个进程(通常每个CPU 1个),在大多数情况下,Node社区认为这是一个可靠的方法。 不过,你可能会对这个现实感到惊讶。
  • 堆栈跟踪通常由于事件队列而丢失,所以您的日志logging和debugging方法需要显着改变

这里有一些小的绊脚石,你可能会遇到一段时间(我仍然碰到这些)

  • 记住在成功的callback中做callback(null, value) 。 传递null作为第一个参数是奇怪的,因此我忘了这样做。 相反,我不小心做了callback(value) ,这是由调用者解释为错误,直到我debugging了一会儿,拍我的额头。
  • 在调用guard子句中的callback时忘记使用return ,并且不希望函数继续执行过去的那个点。 有时这导致callback被调用两次,这会导致所有的不正当行为。

这里有一些你最初可能没有意识到的事情

  • 在node.js中使用其中一个真棒stream控制库来执行复杂的操作,比如并行加载3个networking资源,然后连续进行2个DB调用,然后并行写入2个日志文件,然后发送HTTP响应。 这些东西在节点上是微不足道的,而且在许多同步环境中几乎是不可能的。
  • 所有节点的模块都是新的和现代的,大多数情况下,你可以find一个devise精美的模块和一个伟大的API来做你所需要的。 现在Python也有很好的库,但是比较Node的cheerio或者jsdom模块和python的BeautifulSoup,看看我的意思。 比较python的requests模块和节点的superagent
  • 有一个社区的好处来自于一个现代化的平台,人们专注于现代的networking开发。 节点社区和PHP社区之间的对比不能被夸大。