如果在服务器端使用Node js,为什么它需要是异步的?

时间:2016-10-15 21:45:36

标签: javascript node.js asynchronous

在教程中,人们谈论Node JS的非阻塞,异步功能如何意味着UI在执行慢速操作时仍然保持响应 - 这些是客户端关注点。

但是,这不是服务器端Node的正常用例 - 例如。从数据库中提取数据,然后在API中提供数据。在这种情况下,异步是否重要?一旦所有数据都准备就绪,数据才会被传送,因此它需要相同的时间(假设您正在响应单个http请求)。

3 个答案:

答案 0 :(得分:2)

在Web应用程序中,您可能希望同时运行多个操作。 Node的标准库通过使这些操作异步来实现这种并发性,即你在代码中启动它们,定义你希望它们在完成时做什么,并继续而不等待它们。

您可能还希望您的Web应用程序能够同时处理多个请求。节点恰好是单线程服务器,因此如果您有一个Node进程,则您的单个线程必须是免费的,以便新工作能够开始处理新请求。如果您正在等待异步操作完成,则认为您可以自由工作。

这种组合意味着如果您只使用同步操作来处理Node中的请求,则每个进程只能处理一个请求。一些Web服务器的构建工作方式与此类似,产生尽可能多的新进程(在合理范围内)以处理新请求,但Node不是。相反,您打算利用其事件循环在单个实例中同时处理多个请求。

  

在教程中,人们谈论Node JS的非阻塞,异步功能如何意味着UI在执行慢速操作时仍保持响应

除非您的UI使用Node(即Node是客户端或没有涉及服务器),否则不是这样。 Node不是唯一的异步JavaScript形式 - 例如,在浏览器中使用XHR或setTimeout。也许教程是关于那些或只是非常困惑。

答案 1 :(得分:2)

Node.js在单个线程中运行。任何单个线程运行时都需要非阻塞i / o以避免无响应。

在网络浏览器中,“无响应”表示用户无法与页面交互,浏览器无法处理requestAnimationFrame等常规任务。这是一件坏事,但它只影响一个用户。

在Web服务器中,无响应意味着服务器无法响应任何请求。如果10个用户同时访问您的网站,则会阻止9个用户,而1个用户则等待数据库。这是灾难性的。

答案 2 :(得分:0)

在路上开车。然后走上4路停车标志。 轮到他了,司机b轮到他了,司机c轮到他了,司机不注意那里的交通。司机,e,f,g在另外3个方面诅咒这个没有轮到他的司机,我,j,伙计们背后司机D诅咒为什么司机D没有在4路站下转弯。

最后司机D轮到他了。

将是同步的。

你出去驾驶并前往一个四向停车灯交叉路口,左转车道,车道通过右转车道和右转车道。所有4个方向的每条车道和灯光。

有些时候你会等一会儿右转,另一次你直接穿过而不等待(获得绿灯),有时你会得到黄色和红色的灯光。有时你会左转绿灯,即将到来的交通也会同时左转绿灯。右转车道的人可能会得到一个黄色/屈服的标志。

它可能会停下来并在合理范围内到处走。但这将是更多的异步类型。是多事一下子发生的。

大多数大型应用都值得他们的东西。密集的数据库应用程序一个数据库请求可能会很长。并且它可能需要服务器将数据库到服务器到数据库到服务器到数据库,并且需要100多次。获取所有数据。在服务器可以决定发送客户端的内容之前。

有点像做饭,你有各种肉类和烹饪方式,比其他人需要更长的时间,与蔬菜一样,加上你需要处理盘子,银器等...有人可能是过敏或只喜欢某种食物以某种方式与其他食物相比。这与服务器处理来自客户端的请求,从服务器初始设置获取数据,获取模板,获取图片以及准备好将所有数据打包到服务器返回客户端之前的服务器没有什么不同。

你真的会做一个火鸡,这需要几个小时,然后一旦它开始制作和烹饪一些馅饼需要另外几个小时,同时制作馅饼火鸡变冷,当馅饼完成后你开始制作一次一个蔬菜,只有在前一个蔬菜完全完成烹饪后才烹饪下一个蔬菜,并且所有餐具都已经过清洁,干燥和收起。而你的计划是在天气炎热的时候吃掉一切。

烹饪多任务错误异步,同时烹饪多个东西,所以最后所有东西都聚集在一起,并且在几分钟之内,能够为桌子提供所有食物。与异步代码差别不大。虽然你正在做的每项任务都是同步的,但每一餐都变得异步。