Node.js 常见的发展问题、陷阱和建议是什么?

Node.js 常见的发展问题、陷阱和建议是什么?,node.js,express,Node.js,Express,我在Node.js中只开发了2周,并开始重新创建一个以前用PHP编写的网站。到目前为止还不错,看起来我可以在相同或更短的时间内在Node(使用Express)中完成与PHP相同的事情 我遇到了一些您必须习惯的事情,例如使用模块、不共享公共环境的模块,以及养成在文件系统和数据库操作中使用回调的习惯等 但是,开发人员以后可能会发现哪些对node中的开发非常重要的东西呢?在节点中开发的其他所有人都有问题,但这些问题直到稍后才会出现?陷阱?有什么专业人士知道而普通人不知道的吗 如果您有任何建议和建议,我

我在Node.js中只开发了2周,并开始重新创建一个以前用PHP编写的网站。到目前为止还不错,看起来我可以在相同或更短的时间内在Node(使用Express)中完成与PHP相同的事情

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

但是,开发人员以后可能会发现哪些对node中的开发非常重要的东西呢?在节点中开发的其他所有人都有问题,但这些问题直到稍后才会出现?陷阱?有什么专业人士知道而普通人不知道的吗


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

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

  • 节点将暂停执行以最终/定期运行垃圾收集器。发生这种情况时,您的服务器将暂停一段时间。对大多数人来说,这个问题不是什么大问题,但它可能成为构建近时间系统的障碍。看
  • 节点是单个进程,因此默认情况下只使用1个CPU。有内置的集群支持来运行多个进程(通常每个CPU一个进程),在大多数情况下,节点社区认为这是一种可靠的方法。然而,你可能会对这个现实感到惊讶
  • 堆栈跟踪通常由于事件队列而丢失,因此您的日志记录和调试方法需要显著更改
下面是一些你可能会遇到的小绊脚石(我仍然会碰到这些)

  • 记住在成功回调时执行
    回调(null,value)
    。将null作为第一个参数传递是很奇怪的,因此我忘记了这样做。相反,我意外地执行了
    回调(value)
    ,调用方将其解释为错误,直到我调试了一段时间并拍了拍额头
  • 当您在guard子句中调用回调并且不希望函数继续执行超过该点时,忘记使用
    return
    。有时这会导致回调被调用两次,从而导致各种各样的错误行为
以下是一些你最初可能没有意识到的好事情

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

第一件事:这个问题不适合StackOverflow。第二:一般来说,语言几乎从来都不是问题。系统的体系结构几乎总是一个问题。@freakish yes有时语言是一个问题,如果它不适合您的应用程序需要。这就是为什么您可能不打算用汇编语言编写网站的原因。