为什么以及何时使用Node.js?[复制]

Why and when to use Node.js? [duplicate]

提问人:gion_13 提问时间:4/11/2011 最后编辑:Communitygion_13 更新时间:7/19/2014 访问量:30135

问:

这个问题在这里已经有答案了:
11年前关闭。

可能的重复:
如何决定何时使用Node.js?

对不起,如果我有点模棱两可,但我试图理解使用 Node.js 而不是其他服务器端语言的真正优势。

我是一个 JavaScript 爱好者,所以我可能会玩 Node.js,但我想知道我是否应该在我的项目中使用它。

JavaScript node.js 服务器端-javascript 服务器端

评论

3赞 Raynos 4/11/2011
可能想看看这个视频
0赞 KJYe.Name 4/11/2011
@Raynos感谢您的视频分享。
2赞 Raynos 4/11/2011
@kjy112我建议你在谷歌上搜索视频“ryan dahl node.js”,应该有大约 4 个。一切都很好。
0赞 channasmcs 10/11/2016
zgadzaj.com/......
1赞 ToolmakerSteve 2/15/2017
我觉得奇怪的是,没有一个答案能与当今最具可比性(和大量使用)的替代方案进行比较/对比!node.jsphp

答:

29赞 David Tang 4/11/2011 #1

两个最常被引用的优点是:

  • JavaScript 既是服务器端的,也是客户端的。要学习的东西更少,上下文切换更少,并且能够在两端重用代码。
  • 使用非阻塞 I/O 和 Chrome 的 V8 引擎来提供快速、高度可扩展的服务器。

不过,对我来说,最有趣的部分是这个领域发生的活动量。有很多非常有趣的想法正在开发中 - 请务必查看Node.js模块列表

评论

6赞 Raynos 4/11/2011
可能会重新排序那些。代码重用没什么大不了的。事件非阻塞 IO 和真正快速可扩展的服务器是一件事。
0赞 wobbily_col 12/18/2013
我们几乎必须使用 Javascript 客户端。我认为在服务器端使用它是一个缺点,因为有像 Python 这样更好的语言可用
11赞 Demian Brecht 4/11/2011 #2

就我个人而言,我最有可能在以下情况下使用Node.js:

  • 我想编写一个不使用 HTTP 协议的服务器。
  • 我正在对服务器实现进行原型设计。
  • 我正在编写一个不需要大量流量的服务器(尽管我从未在匹配的C++实现旁边分析过Node.js实现)。
  • 我想活跃在社区中(社区显然发展得相当快)。

评论

3赞 Raynos 4/11/2011
@DemianBrecht我想你会发现node.js是一个非常快的服务器,可以处理大量的流量。如果你想要更好的东西,用 C 手动编写一个 HTTP 服务器。
2赞 Demian Brecht 4/12/2011
@Raynos我认为它能够简单地基于它使用 V8 的事实:)话虽如此,请原谅我的无知,但恕我直言,在构建大型服务器(例如游戏等)时,您在强类型、OO、编译语言中损失太多。
3赞 Demian Brecht 4/12/2011
@Raynos可能是我把自己解释得不够好。无论如何,我真的需要深入研究node.js进一步:)我并不担心优化,而是担心整个系统架构。我意识到编写某些子系统脚本的好处,但我看不出在 Javascript 中开发整个系统框架可以很好地实现可扩展性等,这就是为什么我提到您将因偏离使用强类型、OO 编译语言而遭受的损失作为基础。
3赞 Raynos 4/12/2011
@DemianBrecht,您不会因为强类型、OO 和编译而失去任何东西。这只是一种不同的态度。您编写函数式样式代码。你可以像在 JavaScript 中一样轻松地用 C++ 编写意大利面条维护噩梦。您还可以在 JavaScript 中编写与在 C++ 中一样强大的可维护架构。JavaScript 不是一种玩具语言。就像 Scheme 一样。
3赞 Raynos 4/12/2011
@DemianBrecht 在某些方面,我可以同意经典C++风格的 OO 允许您处理所有开发人员都具有一系列培训专业知识的大型代码库。至少我可以确认这是基于合理的理由,而不是无知。在 node 中编写大型可维护的 100k+ 代码库是一项艰巨的任务。C++ 已经为此进入了跟踪和错误阶段。你的权利虽然对 SO 发表一些评论不是要走的路,也许是关于几品脱的辩论?
18赞 yojimbo87 4/11/2011 #3

当你(或者即使你不是)JavaScript爱好者时,你可以/应该使用Node.js,原因如下:

  • 它是一个低级、轻量级和独立的框架,它将 JavaScript 的强大功能带入了服务器端环境。
  • 如果你喜欢更高层次的抽象,那么这里有大量的模块npm 包管理器,你可以在其中找到各种现成的应用程序。
  • 快速/无阻碍的开发过程 - 例如,您不需要大量额外的工具即可开始编写严肃的东西。
  • 基于开源的大型社区,充满了爱好者和非常有才华的人。
  • 专为创建面向 Web 的实时应用程序而设计 - 这就是(不久的)未来。

评论

5赞 Raynos 4/11/2011
您不必是 JavaScript 爱好者!
99赞 Raynos 4/11/2011 #4

它是基于 V8 的事件异步非阻塞 I/O 构建。

因此,我们获得了 V8 的所有性能提升,V8 是 Google JavaScript 解释器。由于 JavaScript 性能竞赛尚未结束,您可以期待 Google 不断更新 V8 上的性能(免费)。

我们有非阻塞 I/O,这是执行 I/O 的正确方法。这基于事件循环,并对 I/O 使用异步回调。

它为您提供了有用的工具,例如创建 HTTP 服务器、创建 TCP 服务器、处理文件 I/O。

它是一个低级、高性能的平台,可以执行任何类型的 I/O,而无需从头开始用 C 编写整个内容。由于非阻塞 I/O,它的扩展性非常好。

因此,如果您想使用非阻塞 I/O 编写高度扩展和高效的应用程序,同时仍然具有可用的高级脚本语言,则需要使用 Node.js。如果需要,您可以通过用 C 编写扩展来手动优化部分代码。

有很多用于Node.js的操作系统库可以为您提供抽象,例如 Express.jsnow

如果你想让(缓慢的)高级抽象为你做所有事情,你不想使用Node.js。如果您想要 RAD,则不想使用 Node.js。如果你不能信任一个年轻的平台,你就不想使用Node.js,要么是因为你必须自己编写大量代码来做内置到其他框架中的事情,要么是因为你不能使用Node.js,因为 API 还不稳定,或者它是 sub-1.0 版本。

评论

4赞 Gerry 8/27/2011
> “如果你想要 RAD,你就不想使用 node。”你的意思是在 Node 中开发东西通常需要更长的时间吗?
6赞 Raynos 9/19/2011
@Gerry RAD 由一个非常高级的框架组成,它以非常低的灵活性为代价为您完成大量工作。它基本上在引擎盖下为您做了很多通用的样板。node 是一个低级库。
3赞 Raynos 9/20/2011
@Gerry取决于你对“框架”的定义。Express 是一个非常有用的 http 框架,但仍然无法容纳 RAD。我相信人们将 cakephp 和 rails 移植到节点上。这些类型的框架可能允许 RAD,但也充满了糟糕的设计和反模式
6赞 Raynos 9/20/2011
@Gerry Rails 没有错。这只是一个巨大的抽象。需要权衡取舍。我只是不会在节点上构建类似 rails 的东西,因为 node 有更好的模式
2赞 Gerry 9/20/2011
啊,反模式,因为它最初不是为节点构建的?意义。