【问题标题】:What are common development issues, pitfalls and suggestions?有哪些常见的开发问题、陷阱和建议?
【发布时间】:2012-06-30 04:23:58
【问题描述】:

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

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

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

如果有任何建议和意见,我将不胜感激。

【问题讨论】:

  • 第一件事:这个问题不适合 StackOverflow。其次:总的来说,语言几乎从不成为问题。这个想法,系统的架构几乎总是是个问题。
  • @freakish 是的,有时如果语言不符合您的应用程序需求,它就会成为问题。这就是为什么您可能不会使用 Assembler 编写网站的原因。

标签: node.js express


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多