Node.js 或使用 mongodb 服务器 [关闭]

Posted

技术标签:

【中文标题】Node.js 或使用 mongodb 服务器 [关闭]【英文标题】:Node.js or go for a mongodb server [closed] 【发布时间】:2015-04-23 22:10:52 【问题描述】:

我一直在尝试创建一个 mongodb 服务器,它将接收发布请求并从 mongodb 服务器插入或读取并回复。我从 node.js 开始。然而,当我阅读内容时,我意识到,人们实际上讨厌 node.js。许多人正在穿越到GO。所以我现在很困惑。

我选择 node.js 是因为 javascript 的天然 json 兼容性。然而,在我阅读完所有内容之后,node.js 听起来像是在浪费时间。 有人可以帮我澄清我的困惑吗?

谢谢。

编辑:人们提到回调地狱的问题,一旦业务逻辑开始比简单循环更复杂,就会降低 node.js 的性能。

【问题讨论】:

"人们实际上讨厌 node.js" 在哪里,在什么情况下? “然而,在我读了这么多东西之后,node.js 听起来像是在浪费时间。”我们不知道你读了什么。 “有人可以帮我澄清我的困惑吗?”我看到的唯一困惑是,您认为我们可以在完全不知道您指的是什么的情况下帮助回答您的问题。 任何可以使用谷歌的人,都可以找到数以百万计的关于此的博客文章。例如“Holowaychuk”、“koding.com”。另请参阅reddit.com/r/golang/comments/1ye3z6/go_vs_nodejs_for_servers 虽然,是什么让 *** 更可信,这是值得怀疑的。 基于意见投票结束。 @OzumSafa 你的问题的全部问题是你似乎认为你的问题有一个正确的答案。没有,并且没有上下文,您会遇到这些无用的“X 比 Y”帖子。我在下面更新了我的答案,希望能为您已经阅读的内容添加更多背景信息,但最终您应该决定什么最适合您。 Go 非常简洁,但我正在做的工作的工具在 Node.js 上运行,所以我将在这方面进行开发。您的情况可能有所不同。 【参考方案1】:

人指回调地狱的问题

这对我来说从来都不是问题。您可以在代码中使用您想要的任何结构。如果您发现确实需要 1,000 个嵌套回调,那么任何 Promise 库都可能会有所帮助,但在大多数情况下这种情况很少见。

一旦业务逻辑开始比简单循环更复杂,node.js 的性能就会下降

这很少是个问题。大多数应用程序都是 IO 绑定的。如果你不是,你有几个选择。一是不使用 Node.js。另一种方法是为拖累你的特定部分编译一个原生扩展(因为无论如何你都将编写原生代码来解决这个问题),然后从你的 Node.js 应用程序的其余部分调用它。这样一来,您可以获得本机代码的大部分性能,但仍然可以获得使用 JavaScript 工作的灵活性。

既然你链接到那个 Reddit 帖子,我会在那里解决一些 cmets。

Javascript 非常快。是的,这是真的,V8 非常快……但是,前提是您要对一个简单的基准进行基准测试。一旦您开始添加复杂的应用程序逻辑,所有性能都会消失,因为虚拟机很难正确推断类型,因此无法优化。但是如果你的应用程序包含一个紧密的循环,它会很快..所以它可以做到:D

这都是相对的。毫无疑问,弱类型和解释任何东西都比较慢。这是一个权衡,你必须决定对你正在做的事情是否有意义。就我个人而言,启动另一个盒子来处理负载比重写我在 Go 中使用的所有有用的模块和框架要便宜得多。也许你的情况不是这样,所以你可以决定。

在我 3 年的全职 node.js 开发中,老实说,我只有一次在服务器和客户端中使用相同的 4 行代码。

这通常是正确的。我不明白为什么共享客户端/服务器代码是 Node.js 的某种卖点,因为它不适用于大多数应用程序。我有一个案例,我为 RPC 层编写的几个类同时在服务器和客户端上运行。不过我要说的一件事是,有大量 NPM 包可以同时运行,所以如果你习惯在其中一个上使用一个不错的包,它通常会在另一个上运行。

哦,我有没有提到 Node.js 不全是 JavaScript? NPM 上的很大一部分包也是用 Coffeescript 编写的。希望你不介意学习另一种语言来处理你所依赖的包。为服务器和客户端使用相同的语言真是太棒了!

您无需学习 Coffeescript 即可使用以 Coffeescript 编写的 NPM 包。 Coffeescript 编译为 JavaScript,并在您的代码中以与任何其他包相同的方式使用。此外,这些相同的 Coffeescript 包在浏览器中运行得很好,因为它们都是基于 JavaScript 构建的。

使用 Go,您可以获得类型安全。这不能被夸大了.. 除了可能是 ruby​​-ists(jk jk!不要射我)。

由您决定这对您的用例是否重要。

与 Go 相比,Node.js 的一个好处是 NPM 上有大量可用的包。但大部分都是无用的废弃垃圾。所以,即使这样也是有问题的。

不要使用废弃的垃圾,就像你不会在任何平台上使用任何软件包一样。很容易看到什么是废弃的垃圾。 NPM 会列出更新的内容、更新时间、依赖关系是否是最新的,以及有多少人在使用该包。 Node.js 肯定有大量有用的包可用,就像它们适用于大多数流行平台一样。

测试:假设在 Node.js/Javascript 中,您必须编写检查变量类型的测试。 tsk tsk tsk...这是正确测试JS并确保没有发生任何疯狂的唯一方法。

这不太准确,我真的很好奇这个人的应用程序中发生了什么,这是必要的。

【讨论】:

以上是关于Node.js 或使用 mongodb 服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

搜索 - 本地处理或进行 API 调用? (Android、Node.JS、MongoDB 后端)

我应该将图像存储在MongoDB或本地文件系统中(通过Node.js)

如何将 HTML 页面连接到 MongoDB?

Node.js - Http get 不会在 Postman 或浏览器中显示来自 MongoDb 查询的数据

使用 Node.js 和 mongodb 处理超时

MongoDB 或 PostGreSQL 使用 Python Django 和 Express 和 Node js 会更好 [关闭]