javascript web开发 如何决定何时使用Node.js?




web node js (14)

我可以分享点和使用节点js的原因。

  1. 对于聊天,协作编辑等实时应用程序,我们更好地使用nodejs,因为它是事件库,其中火灾事件和数据来自服务器的客户端。
  2. 简单易懂,因为它是javascript基础,大多数人都有想法。
  3. 大多数当前的Web应用程序都转向角度js和骨干,使用节点很容易与客户端代码交互,因为它们都将使用json数据。
  4. 很多插件可用。

缺点:-

  1. Node将支持大多数数据库,但最好的是mongodb,它不支持复杂的连接和其他。
  2. 编译错误......如果任何错误,应用程序将停止工作,我们需要再次手动或使用任何自动化工具启动它,开发人员应该处理其他每个例外。

结论: - Nodejs最适合用于简单和实时的应用程序。如果你有非常大的业务逻辑和复杂的功能,那么最好不要使用nodejs。如果您想构建一个应用程序以及聊天和任何协作功能..节点可以在特定部分使用,并保持应该与您的便利技术。

我是这类新手,但最近我听到很多关于Node.js好处。 考虑到我一般喜欢使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js. 我想到的Web应用程序就像Bitly一样 - 需要一些内容,归档它。

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

  • 是一个命令行工具,可以作为常规Web服务器运行,并让一个人运行JavaScript程序
  • 利用伟大的V8 JavaScript引擎
  • 当你需要同时做几件事时非常好
  • 是基于事件的所以所有美妙的Ajax类似的东西都可以在服务器端完成
  • 让我们在浏览器和后端之间共享代码
  • 让我们与MySQL交谈

我遇到的一些消息来源是:

考虑到Node.js几乎可以在亚马逊的EC2实例上运行,我试图了解哪些类型的问题需要Node.js,而不是像PHPPythonRuby那样强大的国王。 。 我知道这实际上取决于人们对语言的专业知识,但我的问题更多地涉及一般类别:何时使用特定框架以及它特别适合哪种类型的问题?


如果您的应用程序主要使用web apis或其他io频道,提供或采用用户界面,node.js可能是一个公平的选择,特别是如果你想要挤出最大的可扩展性,或者,如果你的生活中的主要语言是javascript(或各种javascript转换器)。如果你构建微服务,node.js也没关系。Node.js也适用于任何小型或简单的项目。

它的主要卖点是允许前锋负责后端的东西,而不是典型的鸿沟。另一个合理的卖点是,如果您的员工以javascript为导向开始。

但是,除了某一点之外,如果没有可怕的黑客攻击来强制模块化,可读性和流量控制,就无法扩展代码。有些人喜欢那些黑客,特别是来自事件驱动的javascript背景,他们似乎熟悉或可原谅。

特别是,当您的应用程序需要执行同步流程时,您会开始放弃半生不熟的解决方案,这会使您在开发过程中大大减慢速度。如果您的应用程序中有计算密集型部件,请谨慎选择(仅限)node.js. 与我最初使用node.js或写这篇文章相比,也许Koajs或其他新奇事物可以缓解那些最初棘手的问题。


节点提供的另一个功能是能够使用节点的子进程( childProcess.fork()每个需要10mb内存,根据文档)创建多个v8节点的节点,从而不影响运行服务器的主进程。 因此,卸载需要大量服务器负载的后台作业会成为孩子的游戏,我们可以在需要时轻松杀死它们。

我一直在使用节点,在我们构建的大多数应用程序中,同时需要服务器连接,因此网络流量很大。 Express.js和新的Koajs (删除了回调地狱)等框架使节点上的工作变得更加容易。


简而言之:

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

关于Node.js中事件循环的一篇好文章是Mixu的技术博客:了解node.js事件循环


使用NodeJS的原因:

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

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

  • 可通过NPM访问的不断增长的packages池,包括客户端和服务器端库/模块,以及用于Web开发的命令行工具。 其中大部分都方便地托管在github上,有时您可以报告问题并在几小时内找到它! 把所有东西放在一个屋檐下很好,标准化的问题报告和简单的分叉。

  • 它已经成为运行Javascript相关工具和其他与Web相关的工具的事实标准环境,包括任务运行器,缩小器,美化器,链接器,预处理器,捆绑器和分析处理器。

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

使用NodeJS的原因:

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

  • 除此之外,NPM中的许多软件包都有点原始 ,并且仍处于快速发展阶段。 旧框架的一些库经历了十年的测试和错误修正,并且现在非常稳定Npmjs.org没有对包进行评级的机制 ,这导致包大量增加或多或少相同的东西,其中大部分不再维护。

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

  • 不断增长的软件包池可以使一个NodeJS项目与下一个项目显得截然不同 。 由于可用的选项数量巨大(例如Express / Sails.js / Meteor / Derby ),实现方式有很大差异。 这有时会使新开发人员更难进入Node项目。 与Rails开发人员加入现有项目相比:他应该能够很快熟悉应用程序,因为鼓励所有Rails应用程序使用类似的结构

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

我喜欢NodeJS,它既快速又狂野又有趣,但我担心它对可证明的正确性几乎没有兴趣。 让我们希望我们最终可以融合两全其美。 我很想知道将来取代Node会有什么...... :)


  1. Node非常适合快速原型,但我从来没有再用它来做任何复杂的事情。我花了20年时间与编译器建立关系,我肯定想念它。

  2. Node对于维护一段时间没有访问过的代码特别痛苦。类型信息和编译时错误检测是好事。为什么抛出这一切?为了什么? 当dang,当某些东西向南移动时,堆栈痕迹往往完全没用。


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

编辑

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

什么时候用

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

  • 套接字仅限聊天应用,irc应用等服务器。
  • 社交网络强调实时资源,如地理位置,视频流,音频流等。
  • 像分析Web应用程序一样快速处理小块数据。
  • 作为暴露REST唯一api。

什么时候不用

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

  • 简单的博客和静态网站。
  • 就像一个静态文件服务器。

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


我为新项目选择Node.js的另一个原因是:

能够进行基于纯云的开发

我已经使用了Cloud9 IDE一段时间了,现在我无法想象没有它,它涵盖了所有的开发生命周期。 您所需要的只是一个浏览器,您可以随时随地在任何设备上进行编码。 您无需在一台计算机中签入代码(如在家中),然后在另一台计算机(例如在工作场所)结账。

当然,可能有基于云的IDE用于其他语言或平台(Cloud 9 IDE也增加了对其他语言的支持),但使用Cloud 9进行Node.js开发对我来说真的是一次很棒的体验。


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

这意味着您可以在Node.js中创建基于浏览器的聊天应用程序 ,几乎不需要任何系统资源来为很多客户端提供服务。 任何时候你想做这种长轮询,Node.js是一个很好的选择。

值得一提的是Ruby和Python都有工具来做这种事情(分别是eventmachinetwisted ),但是Node.js非常好地完成了它,并且从头开始。 JavaScript非常适合基于回调的并发模型,它在这里很有优势。 此外,能够使用本机的JSON序列化和反序列化客户端和服务器是非常好的。

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

值得指出的是,Node.js对于在客户端/服务器间隙中重复使用大量代码的情况也很有用。 Meteor框架使这很容易,很多人都认为这可能是Web开发的未来。 我可以从经验中说,在Meteor中编写代码非常有趣,其中很大一部分是花更少的时间考虑如何重构数据,因此浏览器中运行的代码很容易操纵它并将其传回。

这是一篇关于金字塔和长轮询的文章,结果很容易在gevent的帮助下设置: TicTacToe和Long Polling with Pyramid


使用Node启动下一个项目的最重要原因...

  • 所有最酷的家伙都进入了它...所以它一定很有趣。
  • 你可以在冷却器上进行聚会,并有很多Node冒险来吹嘘。
  • 在云托管成本方面,你是一个便宜的pincher。
  • 用Rails完成了那个
  • 你讨厌IIS部署
  • 你的旧IT工作变得相当沉闷,你希望你处于一个闪亮的新起点。

期待什么......

  • 如果没有您从未需要的所有服务器膨胀软件,您将感受到安全和安全。
  • 像火箭一样运行并且可以很好地扩展。
  • 你梦想着它。 你安装了它。 节点包repo packages是世界上最大的开源库生态系统。
  • 你的大脑会在嵌套回调的土地上扭曲时间......
  • ......直到你学会遵守Promises
  • SequelizePassport是您的新API朋友。
  • 调试大多数异步代码将会变得有趣
  • 所有Noders掌握Typescript

谁用它?

  • PayPal,Netflix,沃尔玛,LinkedIn,Groupon,优步,GoDaddy,道琼斯
  • 这就是他们切换到Node的原因。

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

我还要提一下,Socket.IO与Node.js相结合,可以比长轮询更进一步减少实时延迟。 作为最坏的情况,Socket.IO将回归长轮询,而是使用网络套接字甚至Flash(如果可用的话)。

但是我还应该提一下,使用Node.js可以更好地解决因线程而导致代码阻塞的任何情况。 或者您需要应用程序进行事件驱动的任何情况。

此外,Ryan Dahl在一次谈话中说,我曾经参加过Node.js基准测试,与Ng​​inx的常规旧HTTP请求密切相关。 因此,如果我们使用Node.js构建,我们可以非常有效地服务我们的常规资源,当我们需要事件驱动的东西时,它就可以处理它了。

另外,它一直都是JavaScript。 Lingua Franca整个堆栈。


我有一个真实世界的例子,我使用Node.js. 我工作的公司有一个客户希望拥有一个简单的静态HTML网站。 本网站用于使用PayPal销售一件商品,客户也希望有一个显示销售商品数量的柜台。 客户预计会有大量访问者访问本网站。 我决定使用Node.js和Express.js框架制作计数器。

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

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

  1. 它非常轻巧,快速。 本网站在三周内访问量超过20万次,最小的服务器资源已经能够处理。
  2. 计数器很容易实时。
  3. Node.js很容易配置。
  4. 有很多模块可以免费使用。 例如,我找到了PayPal的Node.js模块。

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


节点最适合并发请求处理 -

那么,让我们从一个故事开始吧。 从过去2年开始,我正致力于JavaScript和开发Web前端,我很享受。 后端人员提供了一些用Java编写的API,python(我们不关心),我们只是编写一个AJAX调用,获取我们的数据并猜测是什么! 我们完了。 但实际上并不是那么容易,如果我们得到的数据不正确或者存在服务器错误,那么我们就会陷入困境,我们必须通过邮件或聊天联系我们的后端人员(有时也会在whatsApp上:)。)并不酷。 如果我们用JavaScript编写API并从前端调用这些API,该怎么办? 是的,这很酷,因为如果我们在API中遇到任何问题,我们可以调查它。 你猜怎么着 ! 你现在可以这样做,怎么样? - 节点就在你身边。

Ok同意您可以用JavaScript编写API,但如果我对上述问题感到满意怎么办。 您是否有任何其他理由将节点用于rest API?

所以这就是神奇的开始。 是的我还有其他理由将节点用于我们的API。

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

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

2.线程方式:我们的服务器将为请求r1r2创建两个线程,并在查询数据库之后为其目的服务,以便快速实现它的目的。但它是内存消耗,因为你可以看到我们启动了两个线程,当两个请求都查询时问题也增加了相同的数据然后你必须处理死锁类问题。 所以它比等待方式更好,但仍有问题。

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

3.节点:当同一个并发请求进入节点时,它将通过其回调注册事件并向前移动它不会等待特定请求的查询响应。所以当r1请求到来时节点的事件循环(是的,有一个事件)用于此目的的节点中的循环。)使用其回调函数注册事件并向前移动以提供r2请求,并类似地通过其回调注册其事件。 每当任何查询完成时,它会触发相应的事件并执行其回调以完成而不会被中断。

所以没有等待,没有线程,没有内存消耗 - 是的,这是服务休息API的节点。


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





web-applications