首頁  >  文章  >  web前端  >  node.js能做什麼?幾分鐘讓你了解node.js的作用總結

node.js能做什麼?幾分鐘讓你了解node.js的作用總結

寻∝梦
寻∝梦原創
2018-09-05 14:11:048911瀏覽

本篇文章主要的介绍了关于node.js的定义介绍,还有关于node.js的作用总结,希望大家多学习,让我们一起来看这篇文章吧

首先我们先来看看node.js能做些什么?

这是node比较正式的介绍

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。(事件驱动:事件触发过程中,进行决策的一种策略,简单说就是跟随当前时间点上出现的事物,调用可用的资源进行解决该事物,使得不断出现的事物得以解决,防止事物堆积)

Node.js 的包管理器 npm,成为世界上最大的开放源代码的生态系统。想要知道更多就来PHP中文网node.js视频教程

这些都是关于nodejs的定义,现在看看nodejs的作用总结:

node.js有几个特别显著的优点:快,性能高,开发效率高,应用范围广

别人一般会含糊的告诉你:node.js有非阻塞,事件驱动I/O等特性,从而让高并发(high concurrency)的轮询(Polling)和comet构建的应用中成为可能。

当你看完这些解释觉得还是不太理解的时候,下面我就简单粗暴的来帮助你你理解理解node.js。

浏览器给网站发请求的过程一直没怎么变过。当浏览器给网站发了请求。服务器收到了请求,然后开始搜寻被请求的资源。如果有需要,服务器还会查询一下数据库,最后把响应结果传回浏览器。

不过,在传统的web服务器中(比如Apache),每一个请求都会让服务器创建一个新的进程来处理这个请求。

后来有了Ajax。有了Ajax,我们就不用每次都请求一个完整的新页面了,取而代之的是,每次只请求需要的部分页面信息就可以了。这显然是一个进步

。但是比如你要建一个FriendFeed这样的社交网站(类似人人网那样的刷朋友新鲜事的网站),你的好友会随时的推送新的状态,然后你的新鲜事会实时自动刷新。

要达成这个需求,我们需要让用户一直与服务器保持一个有效连接。目前最简单的实现方法,就是让用户和服务器之间保持长轮询(long polling)。

HTTP请求不是持续的连接,你请求一次,服务器响应一次,然后就完了。长轮询是一种利用HTTP模拟持续连接的技巧。具体来说,只要页面载入了,不管你需不需要服务器给你响应信息,你都会给服务器发一个Ajax请求。

这个请求不同于一般的Ajax请求,服务器不会直接给你返回信息,而是它要等着,直到服务器觉得该给你发信息了,它才会响应。比如,你的好友发了一条新鲜事,服务器就会把这个新鲜事当做响应发给你的浏览器,然后你的浏览器就刷新页面了。浏览器收到响应刷新完之后,再发送一条新的请求给服务器,这个请求依然不会立即被响应。于是就开始重复以上步骤。利用这个方法,可以让浏览器始终保持等待响应的状态。虽然以上过程依然只有非持续的Http参与,但是我们模拟出了一个看似持续的连接状态

我们再看传统的服务器(比如Apache)。每次一个新用户连到你的网站上,你的服务器就得开一个连接。每个连接都需要占一个进程,这些进程大部分时间都是闲着的(比如等着你好友发新鲜事,等好友发完才给用户响应信息。或者等着数据库返回查询结果什么的)。

虽然这些进程闲着,但是照样占用内存。这意味着,如果用户连接数的增长到一定规模,你服务器没准就要耗光内存直接瘫了。

这种情况怎么解决?解决方法就是刚才上边说的:非阻塞和事件驱动。这些概念在我们谈的这个情景里面其实没那么难理解。

你把非阻塞的服务器想象成一个loop循环,这个loop会一直跑下去。一个新请求来了,这个loop就接了这个请求,把这个请求传给其他的进程(比如传给一个搞数据库查询的进程),然后响应一个回调(callback)。完事了这loop就接着跑,接其他的请求。这样下来。服务器就不会像之前那样傻等着数据库返回结果了。

如果数据库把结果返回来了,loop就把结果传回用户的浏览器,接着继续跑。在这种方式下,你的服务器的进程就不会闲着等着。从而在理论上说,同一时刻的数据库查询数量,以及用户的请求数量就没有限制了。服务器只在用户那边有事件发生的时候才响应,这就是事件驱动。

FriendFeed是用基於Python的非阻塞框架Tornado (知乎也用了這個框架) 來實現上面說的新鮮事功能的。不過,Node.js就比前者更妙了。

Node.js的應用是透過javascript開發的,然後直接在Google的變態V8引擎上跑。用了Node.js,就不用擔心用戶端的請求會在伺服器裡跑了一段能夠造成阻塞的程式碼了。因為javascript本身就是事件驅動的腳本語言。你回想一下,在為前端寫javascript的時候,更多時候你都是在搞事件處理和回呼函數。 javascript本身就是為事件處理量身訂做的語言。

Node.js還是處於初期階段。如果你想開發一個基於Node.js的應用,你應該會需要寫一些很底層程式碼。

但是下一代瀏覽器很快就要採用WebSocket技術了,從而長輪詢也會消失。在Web開發裡,Node.js這種類型的技術只會變得越來越重要。

以上就是這篇關於node.js的總結了,很詳細,希望能多看看,讓大家更好的理解node.js。想要學更多的同學可以去PHP中文網Node.js開發手冊欄位

【小編推薦】

css如何自訂字體? html中的文字字體樣式介紹

html base標籤怎麼用? html base標籤的用法總結

以上是node.js能做什麼?幾分鐘讓你了解node.js的作用總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn