NodeJS 入门

2022年4月16日 312点热度 0人点赞 0条评论

nodeJS 不是一门语言,而是一个 Javascript 运行时的环境,以前 JS 可以运行在浏览器,现在有人专门开发了一个基于 v8 引擎的运行环境,意味着其他平台可以进行 JS 开发,比如在 Linux 上部署 node 后,我们就可以在 linux 上做服务器编程,进一步讲 nodejs 让 JS 插上了翅膀,可以往后端发展,触及各种开发环境。

图片

对于 NodeJS, 官网有一个 About 说明,这也是 Node 的精华之处

About Node.js®

As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications. In the following "hello world" example, many connections can be handled concurrently. Upon each connection, the callback is fired, but if there is no work to be done, Node.js will sleep.


作为一种异步事件驱动的 JS 运行环境,NodeJS 是为了可扩展的网络应用程序设计的,在下列 Hello World 代码案例中,许多的网络连接会被并发执行。每一次网络请求,会触发一次回调,但是如果没有网络请求,NodeJS 会处于暂停状态。

const http = require('http');
const hostname = '127.0.0.1';const port = 3000;
const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World');});
server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`);});

学习 NodeJS 之前,我们需要了解为什么这样设计?

大千世界,万变不离其宗,之所以异步执行代码,是因为在网络应用程序的性能上,我们很明显观察到一个问题:cpu 计算的速度比网络io(或者磁盘io)快很多,但是当我们响应一个 get/post 请求的时候,采用同步阻塞的机制执行时,经常需要等待,无法充分利用 cpu ,因为 cpu 需要等待对方网络传输过来的数据。NodeJS 是异步非阻塞的,且把一个一个的请求当成一个一个的事件,当 node 进程发现有任务做了就去执行,就不再挡在门口必须把之前的任务做完才行,就像饭馆只安排了一个服务员,只要有空闲就去别的桌子服务,提高饭店的劳动效益。

到底该如何理解阻塞这个问题呢? 有两个终端 A 和 B,A 现在写入数据到网络通道,B 读取通道中 A 写过来的数据,这就是一个网路传输的基本的模型,但是网络传输是一个经常有例外的事物,比如 A 传输的文件的速度太慢,B 就需要等待很久,或者 A 因为网络抖动卡顿了 B 也需要守在对应的 ip和端口上进行等待,随时接收数据,在这等待期间是不可能上厕所的,B会不断的问这个 ip 数据到了没,估计 100 遍不止,试想这种等待是必须的吗,显然不是,如果还有别的任务要执行,太影响效率了。所以,异步执行就可以减少 io 等待。

提示:nodeJS 不是万能的,它只是适合做一些 io 密集型的应用,这类应用如一些游戏,小型 app ,网站等。所谓 io 密集就是读写频繁(计算量不大)。

阻塞 VS 非阻塞

https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/

对于想要学习的小伙伴,最好多了解网络应用开发的要素。

30740NodeJS 入门

这个人很懒,什么都没留下

文章评论