什么是Node.js?

hvelit 发布于 2019-11-10 javascript 最后更新 2019-11-10 12:10 79 浏览

我没有完全得到Node.js的全部内容。也许这是因为我主要是一个基于Web的商业应用程序开发人员。它是什么以及它的用途是什么? 我迄今为止的理解是:

  1. 编程模型是由事件驱动的,特别是它处理I/O的方式。
  2. 它使用JavaScript,解析器是V8
  3. 它可以轻松用于创建并发服务器应用程序。
我的理解是否正确?如果是的话,那么偶数I / O有什么好处,它更多的是并发性的东西吗?另外,Node.js的方向是成为像基于JavaScript(基于V8的)编程模型的框架吗?
已邀请:

adolor

赞同来自:

问:编程模型是事件驱动的,尤其是它处理I/O的方式。 正确。它使用回调,因此访问文件系统的任何请求都会导致请求被发送到文件系统,然后Node.js将开始处理其下一个请求。一旦从文件系统获得响应,它只会担心I / O请求,此时它将运行回调代码。但是,可以进行同步I / O请求(即阻塞请求)。开发人员可以在异步(回调)或同步(等待)之间进行选择。 问:它使用JavaScript,解析器是V8。 是 问:它可以很容易地用于创建并发服务器应用程序。 是的,虽然您需要手动编写相当多的JavaScript代码。查看一个框架可能会更好,例如http://www.easynodejs.com/ - 它带有完整的在线文档和示例应用程序。

nsunt

赞同来自:

我认为其优点是:

  1. 在VM上以动态语言(JavaScript)进行Web开发,速度非常快(V8)。它比Ruby,Python或Perl快得多。
  2. 能够以最小的开销处理数千个并发连接。
  3. JavaScript非常适合具有第一类函数对象和闭包的事件循环。人们已经知道如何使用它在浏览器中使用它来响应用户发起的事件。
  4. 很多人已经了解JavaScript,甚至不认为是程序员的人。它可以说是最流行的编程语言。
  5. 在Web服务器和浏览器上使用JavaScript可以减少两个编程环境之间的阻抗不匹配,这两个编程环境可以通过JSON传递数据结构,这两个方程在方程式的两侧都是相同的。可以在服务器和客户端等之间共享重复的表单验证代码。

gnihil

赞同来自:

两个很好的例子是关于如何管理模板并使用渐进增强功能。您只需要一些轻量级的JavaScript代码即可使其完美运行。 我强烈建议您观看和阅读这些文章:

选择任何语言并尝试记住如何管理HTML文件模板以及在DOM结构中更新单个CSS类名称时必须执行的操作(例如,用户单击菜单项并且您希望将其标记为“选中”并更新页面内容)。 使用Node.js就像在客户端JavaScript代码中一样简单。获取您的DOM节点并将CSS类应用于该节点。获取您的DOM节点和innerHTML您的内容(您将需要一些额外的JavaScript代码来执行此操作。阅读文章以了解更多信息)。 另一个很好的例子是,您可以使用相同的代码打开或关闭JavaScript来使您的网页兼容。想象一下,您有一个用JavaScript制作的日期选择,允许您的用户使用日历获取任何日期。您可以编写(或使用)相同的JavaScript代码,以使其与您的JavaScript打开或关闭一起使用。

yut

赞同来自:

有一个非常好的快餐店比喻,最能说明Node.js的事件驱动模型,请参阅完整的文章,Node.js, Doctor’s Offices and Fast Food Restaurants – Understanding Event-driven Programming 以下是摘要:

If the fast food joint followed a traditional thread-based model, you'd order your food and wait in line until you received it. The person behind you wouldn't be able to order until your order was done. In an event-driven model, you order your food and then get out of line to wait. Everyone else is then free to order.
Node.js是事件驱动的,但大多数Web服务器都是基于线程的.York解释了Node.js的工作原理:
  • 您使用网络浏览器在a上发出“/about.html”请求 Node.js web服务器。
  • Node.js服务器接受您的请求并调用要检索的函数 来自磁盘的那个文件。
  • 当Node.js服务器正在等待检索文件时,它 服务于下一个网络请求。
  • 检索文件时,有一个回调函数 插入Node.js服务器队列。
  • Node.js服务器执行该功能,在这种情况下 呈现“/about.html”页面并将其发送回您的网络浏览器。“

frerum

赞同来自:

闭包是一种在创建它的上下文中执行代码的方法。 这意味着你可以定义变量,然后启动非阻塞I/O函数,并为其回调发送一个匿名函数。 当任务完成后,回调函数将在带有变量的上下文中执行,这就是闭包。 闭包非常适合编写具有非阻塞I / O的应用程序,因为管理异步执行的函数的上下文非常容易。

uaut

赞同来自:

Node.js是一个为服务器端JavaScript代码构建的开源命令行工具。您可以下载tarball,编译并安装源代码。它允许您运行JavaScript程序。 JavaScript由V8执行,这是一个由Google开发的JavaScript引擎,用于Chrome浏览器。它使用JavaScript API来访问网络和文件系统。 它的性能和执行并行操作的能力很受欢迎。

Understanding node.js is the best explanation of node.js I have found so far.
以下是关于该主题的一些好文章。

prerum

赞同来自:

此外,不要忘记提到谷歌的V8非常快。它实际上将JavaScript代码转换为具有编译二进制的匹配性能的机器代码。因此,除了所有其他伟大的东西,它是无助的快速。

xporro

赞同来自:

那么,I understand that

  • Node's goal is to provide an easy way to build scalable network programs.
  • Node is similar in design to and influenced by systems like Ruby's Event Machine or Python's Twisted.
  • Evented I/O for V8 javascript.
对我而言,这意味着你在所有三个假设中都是正确的。图书馆看起来很有前途!

siusto

赞同来自:

V8是JavaScript的实现。它允许您运行独立的JavaScript应用程序(以及其他内容)。 Node.js只是为V8编写的库,它实现了I / O.这个概念有点难以解释,我相信有人会回答一个比我更好的解释......要点是,不要做一些输入或输出并等待它发生,你只是不要等待为了它完成。例如,请求文件的上次编辑时间:

// Pseudo code
stat( 'somefile' )
这可能需要几毫秒,或者可能需要几秒钟。使用事件I/O,您只需触发请求,而不是等待您附加一个在请求完成时运行的回调:
// Pseudo code
stat( 'somefile', function( result ) {
  // Use the result here
} );
// ...more code here
这使它很像浏览器中的JavaScript代码(例如,具有Ajax样式功能)。 有关更多信息,请查看文章Node.js is genuinely exciting,这是我对库/平台的介绍......我发现它非常好。

xsed

赞同来自:

内容太长未翻译