我在 Node.js 中开发只有 2 周,并开始重新创建一个以前用 PHP 编写的网站。到目前为止一切顺利,看起来我可以在 Node(使用 Express)中做同样的事情,在相同或更短的时间内在 PHP 中完成。
我遇到了一些你必须习惯的事情,例如使用模块、不共享公共环境的模块,以及养成使用回调进行文件系统和数据库操作的习惯等。
但是,开发人员以后可能会发现什么对node开发非常重要的东西吗?在 Node 中开发的其他人都有问题,但直到以后才浮出水面?陷阱?专业人士知道而菜鸟不知道的事情吗?
我将不胜感激任何建议和建议。
以下是您可能要到以后才意识到的事情:
- 节点将暂停执行以最终/定期运行垃圾回收器。发生这种情况时,您的服务器将暂停打嗝。对于大多数人来说,这个问题不是一个重大问题,但它可能是构建近时系统的障碍。请参阅 Node.js 在高负载下,可伸缩性是否会因为垃圾回收而受到影响?
- 节点是单个进程,因此默认情况下仅使用 1 个 CPU。有内置的集群支持来运行多个进程(通常每个 CPU 1 个),在大多数情况下,Node 社区认为这是一种可靠的方法。不过,您可能会对这一现实感到惊讶。
- 堆栈跟踪经常由于事件队列而丢失,因此您的日志记录和调试方法需要发生重大更改
这里有一些你可能会遇到一段时间的小绊脚石(我仍然会遇到这些)
- 记住在成功的回调时执行
callback(null, value)
。将 null 作为第一个参数传递很奇怪,因此我忘记这样做。相反,我不小心做了callback(value)
,这被调用者解释为错误,直到我调试了一段时间并拍了拍我的额头。 - 当您在 guard 子句中调用回调并且不希望函数在该点之后继续执行时,忘记使用
return
。有时这会导致回调被调用两次,从而导致各种不当行为。
这里有一些你最初可能没有意识到的好东西
- 在node.js中,使用一个很棒的流控制库来执行复杂的操作要容易得多,例如并行加载3个网络资源,然后串行进行2个数据库调用,然后并行写入2个日志文件,然后发送HTTP响应。这些东西在节点上是琐碎而美丽的,在许多同步环境中几乎是不可能的。
- 所有node的模块都是新的和现代的,在大多数情况下,你可以找到一个设计精美的模块,有一个很棒的API来做你需要的事情。Python现在也有很棒的库,但是将Node的cheerio或jsdom模块与python的BeautifulSoup进行比较,看看我的意思。将python的
requests
模块与节点的superagent
进行比较。 - 使用人们专注于现代 Web 开发的现代平台会带来社区利益。节点社区和PHP社区之间的对比怎么强调都不为过。