5

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

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

但是,开发人员以后可能会发现对节点开发非常重要的东西吗?其他人在 Node 中开发的问题,但直到后来才浮出水面?陷阱?专业人士知道而菜鸟不知道的任何事情?

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

4

1 回答 1

19

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

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

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

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

这里有一些你最初可能没有意识到的好东西

  • 在 node.js 中使用一个很棒的流控制库来执行复杂的操作要容易得多,比如并行加载 3 个网络资源,然后串行进行 2 个 DB 调用,然后并行写入 2 个日志文件,然后发送一个HTTP 响应。这些东西在节点中是微不足道的和美丽的,在许多同步环境中几乎是不可能的。
  • node 的所有模块都是新的和现代的,并且在大多数情况下,您可以找到一个设计精美的模块,它具有出色的 API 来满足您的需求。Python 现在也有很棒的库,但是将 Node 的cheerio 或 jsdom 模块与 python 的 BeautifulSoup 进行比较,看看我的意思。将 python 的requests模块与 node 的superagent.
  • 使用一个人们专注于现代 Web 开发的现代平台可以为社区带来好处。节点社区和 PHP 社区的对比怎么强调都不过分。
于 2012-06-28T15:53:49.867 回答