如何决定何时使用 Node.js?

问:

锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

我是这种东西的新手,但最近我听说了很多关于 Node.js 有多好。考虑到我是多么喜欢使用 jQuery 和 JavaScript,我不禁想知道如何决定何时使用 Node.js。我想到的网络应用程序类似于 Bitly - 获取一些内容,将其存档。

从过去几天我一直在做的所有作业中,我获得了以下信息。节点.js

是一种命令行工具,可以作为常规 Web 服务器运行,并允许运行 JavaScript 程序

利用出色的 V8 JavaScript 引擎

当您需要同时做几件事时非常好

是基于事件的,所以所有美妙的类似于 Ajax 的东西都可以在服务器端完成

让我们在浏览器和后端之间共享代码

让我们谈谈 MySQL

我遇到的一些来源是:

深入了解 Node.js – 介绍和安装

了解 NodeJS

示例节点 (Archive.is)

让我们制作一个 Web 应用程序:NodePad

考虑到 Node.js 几乎可以在 Amazon’s EC2 实例上开箱即用地运行,我试图了解哪些类型的问题需要 Node.js,而不是像 PHP 这样的任何强大的国王, Python 和 Ruby。我知道这实际上取决于一个人对语言的专业知识,但我的问题更多地属于一般类别:何时使用特定框架以及它特别适合什么类型的问题?

答1:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

您很好地总结了 Node.js 的优点。我的感觉是 Node.js 特别适合您希望保持从浏览器到服务器的持久连接的应用程序。使用称为 “long-polling” 的技术,您可以编写一个向用户实时发送更新的应用程序。对许多网络巨头(如 Ruby on Rails 或 Django)进行长时间轮询会在服务器上产生巨大的负载,因为每个活动客户端都会占用一个服务器进程。这种情况相当于 tarpit 攻击。当你使用 Node.js 之类的东西时,服务器不需要为每个打开的连接维护单独的线程。

这意味着您可以在 Node.js 中创建一个几乎不占用系统资源来为大量客户端提供服务的 browser-based chat application。任何时候你想进行这种长轮询,Node.js 都是一个不错的选择。

值得一提的是,Ruby 和 Python 都有执行此类操作的工具(分别为 eventmachine 和 twisted),但 Node.js 从头开始做得非常好。 JavaScript 非常适合基于回调的并发模型,并且在这方面表现出色。此外,能够对客户端和服务器都使用本机 JSON 进行序列化和反序列化非常棒。

我期待在这里阅读其他答案,这是一个很棒的问题。

值得指出的是,Node.js 也非常适合在客户端/服务器之间重用大量代码的情况。 Meteor framework 让这一切变得非常简单,很多人认为这可能是 Web 开发的未来。我可以根据经验说,在 Meteor 中编写代码非常有趣,其中很大一部分是花更少的时间考虑如何重构数据,因此在浏览器中运行的代码可以轻松操纵它并将其传回。

这是一篇关于 Pyramid 和 long-polling 的文章,在 gevent 的帮助下很容易设置:TicTacToe and Long Polling with Pyramid。

是的,我认为'node.js 特别适合需要从浏览器到服务器的持久连接的应用程序是非常重要的。 - 例如聊天程序或交互式游戏' 如果只是构建一个不一定需要用户/服务器通信的应用程序,那么使用其他框架进行开发就可以了,并且花费的时间会少得多。

谢谢你... 很好的 Q 和 A ;-) 我也会考虑掌握一项伟大的技术,用于前端和后端开发,而不是几个不同的技术;)

为什么要使用长轮询?未来和sockets发生了什么?

我的简短回答是后台进程。请求和响应(包括 REST API)都可以使用任何其他语言和服务器来实现。所以对于那些想在 node.js 中转换他们的 web 项目的人来说。再想想它是同一件事!将节点用作后台进程,例如使用 imap 阅读电子邮件、图像处理、将文件上传到云,或任何冗长或永无止境的进程,这些进程主要是面向事件的......

答2:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

我相信 Node.js 最适合实时应用程序:在线游戏、协作工具、聊天室或任何一个用户(或机器人?或传感器?)对应用程序所做的操作需要立即被其他用户看到,没有页面刷新。

我还应该提到,Socket.IO 与 Node.js 的结合将比长轮询更进一步地减少您的实时延迟。作为最坏的情况,Socket.IO 将回退到长轮询,而是使用 Web 套接字甚至 Flash(如果可用)。

但我还应该提到,几乎任何代码可能由于线程而阻塞的情况都可以使用 Node.js 更好地解决。或者您需要应用程序是事件驱动的任何情况。

此外,Ryan Dahl 在我曾经参加过的一次演讲中说,Node.js 的基准测试与 Nginx 的常规旧 HTTP 请求非常相似。因此,如果我们使用 Node.js 构建,我们可以非常有效地为我们的正常资源提供服务,并且当我们需要事件驱动的东西时,它已经准备好处理它。

另外,它一直都是 JavaScript。整个堆栈上的通用语。

只是有人在 .Net 和 Node 之间切换的观察,系统不同区域的不同语言在上下文切换时有很大帮助。当我查看 Javascript 时,我在客户端工作,C# 表示 App Server,SQL = 数据库。在整个过程中使用 Javascript 工作时,我发现自己混淆了这些层,或者只是花费了更长的时间来进行上下文切换。这可能是整天在 .NET 堆栈上工作并在晚上打瞌睡的产物,但它确实有所作为。

有趣的是,跨文化个体在主流文化和本土文化之间移动时转换方言的做法被称为“语码转换”。

就在前几天,我正在考虑如何以某种方式为不同的 .js 文件分配不同的颜色。客户端绿色,服务器端蓝色。我一直在“迷失”自己。

答3:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

使用 NodeJS 的原因:

它运行 Javascript,因此您可以在服务器和客户端上使用相同的语言,甚至可以在它们之间共享一些代码(例如,用于表单验证,或在任一端呈现视图。)

与传统的多线程 Java 或 ROR 框架相比,单线程事件驱动系统即使在一次处理大量请求时也很快,而且也很简单。

可通过 NPM 访问的不断增长的软件包池,包括客户端和服务器端库/模块,以及用于 Web 开发的命令行工具。其中大部分都方便地托管在 github 上,有时您可以在其中报告问题并在数小时内找到它!将所有内容集中在一个屋檐下,具有标准化的问题报告和轻松的分叉,这真是太好了。

它已成为运行 Javascript 相关工具和其他 Web 相关工具(包括任务运行器、缩小器、美化器、linter、预处理器、捆绑器和分析处理器)的事实上的标准环境。

它似乎非常适合原型设计、敏捷开发和快速产品迭代。

不使用 NodeJS 的原因:

它运行 Javascript,没有编译时类型检查。对于大型、复杂的安全关键系统或包括不同组织之间协作的项目,从长远来看,鼓励合同接口并提供静态类型检查的语言可能会为您节省一些调试时间(和爆炸)。 (虽然 JVM 卡在 null 上,所以请为您的核反应堆使用 Haskell。)

除此之外,NPM 中的许多包都有些原始,并且仍在快速开发中。一些旧框架的库已经经历了十年的测试和错误修复,现在非常稳定。 Npmjs.org 没有对包进行评级的机制,这导致了或多或少做相同事情的包激增,其中很大一部分不再维护。

嵌套回调地狱。 (当然有 20 种不同的解决方案……)

不断增长的包库可以使一个 NodeJS 项目看起来与下一个完全不同。由于可用的选项数量众多(例如 Express/Sails.js/Meteor/Derby),实现方式存在很大差异。这有时会使新开发人员更难加入 Node 项目。与加入现有项目的 Rails 开发人员形成对比:他应该能够很快熟悉应用程序,因为鼓励所有 Rails 应用程序使用类似的结构。

处理文件可能有点痛苦。在其他语言中微不足道的事情,比如从文本文件中读取一行,对于 Node.js 来说已经很奇怪了,以至于有一个 StackOverflow 问题,有 80 多个赞成票。从 CSV 文件中一次读取一条记录没有简单的方法。等等。

我喜欢 NodeJS,它快速、狂野和有趣,但我担心它对可证明的正确性没有兴趣。让我们希望我们最终能够融合两全其美。我很想看看将来会用什么代替 Node… 😃

@nane 是的,我确实认为他们可以解决这个问题,但是您必须限制自己只使用以类型安全语言编写的库,或者接受并非您的所有代码库都是静态类型。但是有一个论点是:既然您应该为您的代码编写良好的测试而不管语言如何,那么即使对于动态类型的代码,您的置信度水平也应该相等。如果我们接受这个论点,那么强类型的优势就减少为有助于开发/调试时间、可证明性和optimization。

@kervin,我同意一些基准测试会很棒,但我对我在网上能找到的东西感到失望。有些人认为 .NET 的性能是 Node 的comparable,但它对您实际在做什么至关重要。 Node 可能擅长于传递具有许多并发连接的少量消息,但对于繁重的数学计算来说并不是那么好。良好的性能比较需要测试各种情况。

@joeytwiddle 在处理大型复杂程序和静态类型检查时,像 Typescript 这样的东西不会帮助 Node.js 吗?

@joeytwiddle 对于它的价值,您可以使用 stillmaintained.com 来确定是否仍然维护 npm 包(因为大多数都在 github 上)。此外,npm search 和 npm show 将显示最后一次发布软件包的日期。

通过将 rails 与 node 进行比较,您会将平台与框架混淆。 Rails 是 Ruby 的框架,就像 Sails 和 meteor 是 Javascript 的框架一样。

答4:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

简而言之:

Node.js 非常适合具有大量并发连接并且每个请求只需要很少 CPU 周期的应用程序,因为事件循环(与所有其他客户端)在函数执行期间被阻塞。

Mixu’s tech blog: Understanding the node.js event loop 是一篇关于 Node.js 中的事件循环的好文章。

答5:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

我有一个使用 Node.js 的真实示例。我工作的公司有一位客户想要一个简单的静态 HTML 网站。该网站用于使用 PayPal 销售一件商品,客户还希望有一个计数器来显示已售商品的数量。客户预计该网站将有大量访问者。我决定使用 Node.js 和 Express.js 框架制作计数器。

Node.js 应用程序很简单。从 Redis 数据库中获取已售商品数量,在商品售出时增加计数器并通过 API 将计数器值提供给用户。

在这种情况下我选择使用 Node.js 的一些原因

它非常轻巧且快速。在三周内,该网站的访问量已超过 200000 次,而最少的服务器资源已经能够处理这一切。计数器很容易实现实时。 Node.js 很容易配置。有很多免费的模块。例如,我为 PayPal 找到了一个 Node.js 模块。

在这种情况下,Node.js 是一个很棒的选择。

你如何主持这样的事情?那你必须在生产服务器上设置nodejs吗?在 Linux 中?

有一些 PaaS,例如 nodejitsu 和 Heroku。或者您确实可以在 linux 机器上设置 nodejs,即来自 amazon ec2。见:lauradhamilton.com/…

在 1,814,400 秒内完成 200,000 次访问。根本不相关。甚至 bash 也可以在最慢的服务器上处理这么多请求。暂存服务器。最慢的虚拟机。

答6:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

使用 Node 开始下一个项目的最重要原因…

所有最酷的家伙都喜欢它……所以它一定很有趣。

你可以在冰箱里闲逛,并有很多 Node 冒险值得吹嘘。

在云托管成本方面,您是个吝啬鬼。

用 Rails 做过吗

你讨厌 IIS 部署

你以前的 IT 工作变得相当乏味,你希望自己在一个闪亮的新创业公司。

期待什么…

使用 Express,您将感到安全可靠,无需您不需要的所有服务器膨胀软件。

像火箭一样运行并且可以很好地扩展。

你做梦。你安装了它。节点包 repo npmjs.org 是世界上最大的开源库生态系统。

在嵌套回调的土地上,你的大脑会被时间扭曲…

…直到你学会遵守你的承诺。

Sequelize 和 Passport 是您的新 API 朋友。

调试主要是异步代码会变得 umm … 有趣。

是所有 Noder 掌握 Typescript 的时候了。

谁使用它?

PayPal、Netflix、沃尔玛、LinkedIn、Groupon、优步、GoDaddy、道琼斯

这就是他们切换到 Node.js 的原因。

是的,我可以用传统的方式回答这个问题。我认为我有资格这样做,但大部分已经说过,我认为一些轻松的乐趣会打破单调。我会定期就其他问题提供技术答案。

使用 ES6 生成器生成异步代码可以避免嵌套回调

@CleanCrispCode:确实是的! ES6 采用了 C# 样式 async/await,因此现在我们可以推出更简洁的异步 Node 代码,也支持传统的 try/catch。在 2016/17 JS 编码器正在切换到 ES6。

一万倍这个“你会感到安全可靠,没有你不需要的所有服务器膨胀软件”

答7:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

没有什么能比得上银弹。一切都伴随着一些与之相关的成本。这就像如果你吃油腻的食物,你会损害你的健康,而健康的食物不像油腻的食物那样带有香料。他们是否想要健康或食物中的香料是个人选择。 Node.js 考虑在特定场景中使用的方式相同。如果您的应用程序不适合该场景,则不应将其用于您的应用程序开发。我只是把我的想法放在同样的位置上:

何时使用 Node.JS

如果您的服务器端代码需要很少的 cpu 周期。在其他世界中,您正在执行非阻塞操作并且没有消耗大量 CPU 周期的繁重算法/作业。如果您来自 Javascript 背景并且喜欢编写单线程代码,就像客户端 JS 一样。

何时不使用 Node.JS

您的服务器请求取决于繁重的 CPU 消耗算法/作业。

Node.JS 的可扩展性考虑

Node.JS 本身并没有利用底层系统的所有核心,默认是单线程的,你必须自己编写逻辑来利用多核处理器并使其成为多线程。

Node.JS 替代方案

可以使用其他选项来代替 Node.JS,但是 Vert.x 似乎很有前途,并且具有许多附加功能,例如 polygot 和更好的可扩展性考虑。

我不确定“何时不使用”中列出的“如果您的服务器端请求包括像 File IO 或 Socket IO 这样的阻塞操作”。如果我的理解是正确的,node.js 的优势之一就是它具有强大的异步方式来处理 IO 而不会阻塞。所以 Node.js 可以被视为阻塞 IO 的“良药”。

@OndraPeterka:您是对的,Node.js 可以治愈阻塞服务器 IO,但是如果您在服务器上的请求处理程序本身正在对其他一些 Web 服务/文件操作进行阻塞调用,那么 Node.js 将无济于事。非阻塞 IO 仅适用于对服务器的传入请求,但不适用于来自您的应用程序请求处理程序的传出请求。

来自 nodejs.org 的 @ajay 他们说“非阻塞 I/O”,请检查您的“非阻塞 I/O”2 和 3。

在当前版本中,节点实际上通过使用集群来支持多核支持。这确实将 Node 应用程序的性能提升了至少两倍。但是,我认为当他们稳定集群库时,性能应该是两倍以上。

您可以使用 node.js 进行繁重的计算。使用 fork。请参阅stackoverflow.com/questions/9546225/…。 Node 使用 cluster 模块可以很好地处理多个内核。 nodejs.org/api/cluster.html

答8:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

我认为没有人提到 Node.js 的另一件好事是令人惊叹的社区、包管理系统 (npm) 和现有的模块数量,只需将它们包含在 package.json 文件中即可。

而且这些包都是比较新鲜的,所以它们有后见之明的好处,并且倾向于符合最近的网络标准。

恕我直言,npm 上的很多包都很糟糕,因为 npm doesn't have a mechanism to rate packages。 CPAN 人的后见之明?

太糟糕了,没有一个 websockets 库可以满足 rfc 6455 规范。当给出这个事实时,node.js 的狂热分子是聋子、哑巴和盲目的。

我不知道您何时发表评论,但截至目前 ws 库支持该规范

答9:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

我的作品:nodejs 非常适合制作分析、聊天应用程序、api、广告服务器等实时系统。天哪,我在 2 小时内使用 nodejs 和 socket.io 制作了我的第一个聊天应用程序,考试周也是如此!

编辑

自从我开始使用 nodejs 已经有好几年了,我用它来制作许多不同的东西,包括静态文件服务器、简单的分析、聊天应用程序等等。这是我对何时使用 nodejs 的看法

何时使用

在制作强调并发性和速度的系统时。

仅套接字服务器,如聊天应用程序、irc 应用程序等。

社交网络强调实时资源,如地理位置、视频流、音频流等。

像分析网络应用程序一样快速处理小块数据。

公开一个 REST only api。

什么时候不使用

它是一个非常通用的网络服务器,因此您可以在任何地方使用它,但可能不是这些地方。

简单的博客和静态网站。

就像一个静态文件服务器。

请记住,我只是在吹毛求疵。对于静态文件服务器,apache 更好,主要是因为它可以广泛使用。多年来,nodejs 社区变得越来越大,越来越成熟,可以肯定地说,如果您有自己的托管选择,nodejs 几乎可以在任何地方使用。

简单的博客仍然可以从 Node.js 中受益。对于提供静态文件,您仍然可以使用 Node.js,如果负载增加,只需根据当前的最佳实践在其前面添加 Nginx 反向代理。 Apache httpd 服务器是垂死的恐龙 - 请参阅 this Netcraft survey。

否则我会说 - 看看 ghost.org,它看起来很棒,并且建立在 NodeJs 之上 - 协作、实时文章编辑。此外,在 NodeJs 中创建一个简单的页面,比如使用 sailsjs.org,既简单又快速,您无需费心学习任何服务器端编程语言

答10:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

可以用在什么地方

高度事件驱动和高度 I/O 绑定的应用程序

处理与其他系统的大量连接的应用程序

实时应用程序(Node.js 从一开始就设计为实时且易于使用。)

处理大量进出其他来源的信息流的应用程序

高流量,可扩展的应用程序

必须与平台 API 和数据库通信的移动应用程序,无需进行大量数据分析

构建网络应用程序

需要经常与后端对话的应用程序

在移动方面,黄金时段的公司依赖 Node.js 提供移动解决方案。看看为什么?

LinkedIn 是一位知名用户。他们的整个移动堆栈都建立在 Node.js 之上。他们从在每台物理机上运行 15 个服务器和 15 个实例变为仅运行 4 个实例——这可以处理双倍的流量!

eBay 推出了 ql.io,这是一种用于 HTTP API 的网络查询语言,它使用 Node.js 作为运行时堆栈。他们能够调整常规的开发人员质量的 Ubuntu 工作站,以处理每个 node.js 进程超过 120,000 个活动连接,每个连接消耗大约 2kB 内存!

Walmart 重新设计了其移动应用程序以使用 Node.js 并将其 JavaScript 处理推送到服务器。

阅读更多:http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/

答11:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

Node best for concurrent request handling -

那么,让我们从一个故事开始。从过去 2 年开始,我一直在研究 JavaScript 和开发 Web 前端,我很享受它。后端人员为我们提供了一些用 Java、python 编写的 API(我们不在乎),我们只需编写一个 AJAX 调用,获取我们的数据并猜一猜!我们完了。但实际上这并不容易,如果我们获得的数据不正确或存在一些服务器错误,那么我们就会卡住,我们必须通过邮件或聊天联系我们的后端人员(有时也在 WhatsApp 上:)。)这个不酷。如果我们用 JavaScript 编写 API 并从前端调用这些 API 会怎样?是的,这很酷,因为如果我们在 API 中遇到任何问题,我们可以调查它。你猜怎么着 !你现在可以做到这一点,如何? – 节点为您服务。

好的,同意你可以用 JavaScript 编写你的 API,但是如果我对上述问题没问题怎么办。您还有其他理由将 node 用于 rest API 吗?

所以这里是魔术开始。是的,我确实有其他理由为我们的 API 使用节点。

让我们回到我们传统的基于阻塞操作或线程的REST API系统。假设发生两个并发请求(r1 和 r2),每个请求都需要数据库操作。所以在传统系统中会发生什么:

<强> 1。等待方式:我们的服务器开始服务r1请求并等待查询响应。 r1 完成后,服务器开始服务 r2 并以相同的方式进行。所以等待不是一个好主意,因为我们没有那么多时间。

<强> 2。线程方式:我们的服务器将为请求 r1 和 r2 创建两个线程,并在查询数据库后达到它们的目的,所以它的速度很快。但是它很消耗内存,因为你可以看到我们启动了两个线程也有问题当两个请求都查询相同的数据时会增加,那么您必须处理死锁类型的问题。所以它比等待方式更好,但仍然存在问题。

现在在这里,节点将如何做到这一点:

<强> 3。 Nodeway : 当相同的并发请求进入节点时,它会使用其回调注册一个事件并继续前进,它不会等待特定请求的查询响应。因此,当 r1 请求到来时,节点的事件循环(是节点中有一个事件循环用于此目的。)使用其回调函数注册一个事件并继续为服务 r2 请求提供服务,并类似地使用其回调注册其事件。每当任何查询完成时,它都会触发其相应的事件并执行其回调以完成而不会被中断。

所以没有等待,没有线程,没有内存消耗——是的,这是提供休息 API 的节点。

嗨,安舒尔。您能否详细说明或建议一些有关线程方式如何发生死锁的资源。

原文链接:https://www.huntsbot.com/qa/XW8J/how-to-decide-when-to-use-node-js?lang=zh_CN&from=csdn

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值