javascript express中文 express官网 - 如何决定何时使用Node.js?





8 Answers

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

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

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

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

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

js中文 express框架 web开发

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

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

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

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

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




简而言之:

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

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




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

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

期待什么......

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

谁用它?

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



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




它可以在哪里使用

  • 高度事件驱动且I / O严重受限的应用程序
  • 处理与其他系统的大量连接的应用程序
  • 实时应用程序(Node.js是从头开始设计的,实时且易于使用。)
  • 将大量信息流传输到其他来源和从其他来源流动的应用程序
  • 高流量,可扩展的应用程序
  • 移动应用程序必须与平台API和数据库通信,而无需进行大量数据分析
  • 构建网络应用程序
  • 需要经常与后端通信的应用程序

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

LinkedIn是一位杰出的用户。 他们的整个移动堆栈都是基于Node.js构建的。 他们从每个物理机器上运行15个服务器,15个实例,到4个实例 - 可以处理双倍的流量!

eBay推出了ql.io,一种用于HTTP API的Web查询语言,它使用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/http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/




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

能够进行基于纯云的开发

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

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




穿石棉longjohns ...

昨天我的标题是Packt Publications, 使用JavaScript进行反应式编程 。 它不是一个以Node.js为中心的标题; 前面的章节旨在涵盖理论,后来代码密集的章节涵盖了实践。 因为我不认为没有给读者一个网络服务器是合适的,所以Node.js似乎是最明显的选择。 该案件在开盘前已经关闭。

我本可以非常乐观地看到我对Node.js的体验。 相反,我诚实地谈到了我遇到的好点和坏点。

让我在这里提供一些相关的引用:

警告:Node.js及其生态系统很热 - 足以让你严重烧伤!

当我在数学方面担任教师助理时,我被告知的一个非显而易见的建议是不要告诉学生一些事情是“容易的”。回想起来,原因有点明显:如果你告诉别人一些事情很容易,那么没有看到解决方案可能最终感觉(甚至更多)愚蠢,因为他们不仅没有得到如何解决问题,而且他们太愚蠢无法理解的问题是一个简单的问题!

有些问题不仅会让来自Python / Django的人感到烦恼,如果你改变任何东西,它会立即重新加载源代码。 对于Node.js,默认行为是,如果进行一次更改,旧版本将继续处于活动状态,直到时间结束或直到您手动停止并重新启动服务器。 这种不恰当的行为不仅会惹恼Pythonistas; 它还会激怒提供各种解决方法的本机Node.js用户。 在撰写本文时,问题“在Node.js中自动重新加载文件”有200多个upvotes和19个答案; 编辑将用户定向到保姆脚本,节点主管,主页位于http://tinyurl.com/reactjs-node-supervisor 。 这个问题为新用户提供了很大的机会感到愚蠢,因为他们认为他们已经解决了问题,但旧的,错误的行为完全没有改变。 并且很容易忘记反弹服务器; 我已多次这样做了。 我想提供的信息是,“不,你不是傻瓜,因为Node.js的这种行为让你感到厌倦; 只是Node.js的设计者没有理由在这里提供适当的行为。 试着应对它,也许从节点主管或其他解决方案中获得一些帮助,但请不要走开,感觉你是愚蠢的。 你不是那个有问题的人; 问题出在Node.js的默认行为中。“

经过一些辩论之后,这部分被遗留下来,正是因为我不想给人一种“很容易”的印象。我在工作中反复切手,而且我不想平息困难。让你相信让Node.js及其生态系统运行良好是一件简单的事情,如果它对你来说也不是直截了当的,你就不知道你在做什么。 如果你没有使用Node.js遇到令人讨厌的困难,那太好了。 如果你这样做,我希望你不要离开感觉,“我是愚蠢的 - 我一定有问题。”如果你遇到与Node.js有关的令人讨厌的惊喜,你就不是傻瓜。 不是你! 它是Node.js及其生态系统!

在最后几章和结论中逐渐提升后,我并不真正想要的附录讨论了我在生态系统中能够找到的内容,并为愚蠢的文字主义提供了一种解决方法:

另一个看起来非常合适并且可以兑换的数据库是HTML5键值存储的服务器端实现。 这种方法具有API的主要优势,大多数优秀的前端开发人员都能很好地理解。 就此而言,它也是一个API,大多数不那么优秀的前端开发人员都能很好地理解。 但是使用node-localstorage包,虽然不提供字典语法访问(您希望使用localStorage.setItem(key,value)或localStorage.getItem(key),而不是localStorage [key]),但实现了完整的localStorage语义,包括默认的5MB quota ?为什么? 服务器端JavaScript开发人员是否需要受到保护?

对于客户端数据库功能,每个网站5MB的配额确实是一个慷慨而有用的空间,让开发人员可以使用它。 你可以设置一个低得多的配额,并且仍然为开发人员提供了一个不可估量的改进,而不是一瘸一拐地进行cookie管理。 5MB的限制并不能很快地适应大数据客户端处理,但是资源丰富的开发人员可以用来做很多事情,这是一个非常慷慨的限制。 但另一方面,5MB并不是最近购买的大多数磁盘的一个特别大的部分,这意味着如果你和一个网站不同意什么是合理使用磁盘空间,或者某些网站只是很糟糕,它并不真正花费你很多,除非你的硬盘已经太满,否则你没有淹没硬盘的危险。 如果平衡稍微少一点或多一点,我们可能会更好,但总的来说,它是解决客户端背景的内在紧张的一个不错的解决方案。

但是,可能会轻轻地指出,当您是服务器的代码编写者时,您不需要任何额外的保护来使您的数据库超过可容忍的5MB大小。 大多数开发人员既不需要也不希望工具充当保姆,并保护他们不要存储超过5MB的服务器端数据。 而在客户端的5MB配额是一个黄金平衡行为在Node.js服务器上相当愚蠢。(并且,对于本附录中涵盖的多个用户的数据库,可能会略微痛苦地指出,每个用户帐户不是5MB,除非您在每个用户帐户的磁盘上创建一个单独的数据库;这是5MB之间共享所有用户帐户在一起。这可能会让人感到痛苦如果你传播病毒!)文档说明配额是可自定义的,但是一周前给开发人员询问如何更改配额的电子邮件是没有答案的,就像问题一样。我能找到的唯一答案是在Github CoffeeScript源代码中,它被列为构造函数的可选第二个整数参数。所以这很容易,您可以指定一个等于磁盘或分区大小的配额。但是除了移植一个没有意义的功能之外,该工具的作者完全没有遵循一个非常标准的解释0的约定,因为对于变量或函数来说意味着“无限制”,其中整数是指定某些资源使用的最大限制。这种错误的最好做法可能是指定配额是无限:

if (typeof localStorage === 'undefined' || localStorage === null)
  {      
  var LocalStorage = require('node-localstorage').LocalStorage;
  localStorage = new LocalStorage(__dirname + '/localStorage',
    Infinity);
  }

按顺序交换两条评论:

人们不断地使用JavaScript作为一个整体来自己的脚,并且JavaScript的一部分被制作成可敬的语言是Douglas Crockford本质上说,“JavaScript作为一种语言有一些非常好的部分和一些非常糟糕的部分。这是好的部分。只要忘记其他任何东西都在那里。“也许热门的Node.js生态系统会发展自己的 ”道格拉斯·克罗克福德“,他会说,”Node.js生态系统是一个编码狂野的西部,但有一些真正的宝石可以找到。这是一个路线图。以下是几乎不惜任何代价避免的区域。以下是可以在任何语言或环境中找到最丰富的付费区域。“

也许其他人可以将这些话作为挑战,并遵循Crockford的主导并为Node.js及其生态系统写下“好的部分”和/或“更好的部分”。我买了一份!

考虑到所有项目的热情程度和工作时间,可能需要在一年,或两年,或三年内,对本文撰写时对未成熟生态系统的任何评论进行大幅度调整。在五年内说“2015 Node.js生态系统有几个雷区”真的很有意义。2020 Node.js生态系统有多个天堂。“




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

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

缺点:-

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

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




Related