node.js不是后端吗?为何说它是前端必备?

2020-04-02 11:33发布

9条回答

  Node.js是Ryan Dahl于2009年5月基于Chrome V8引擎构建的一个开源和跨平台的JavaScript运行环境。主要在Windows、Linux、Unix、MacOSX等不同平台上运行。

拓展:Chrome V8引擎是谷歌开源的一个高性能JS引擎,并用在谷歌浏览器中,可以编译、执行JS代码。

一、Node.js的特点

1、单线程

Node保持了JS在浏览器中单线程的特点。单线程最大好处是不用像多线程编程那样处处在意状态的同步问题,没有死锁的存在,也没有线程上下文切换的开销。

单线程也有其弱点,主要表现在三方面:无法利用多核CPU;错误会引起整个应用退出,应用的健壮性值得考研;大量计算会占用CPU导致无法继续调用异步I/O。

为解决上述问题,Node.js使用child_process来解决单线程中大计算量的问题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来传递结果。

2、 异步I/O

在Node.js中,绝大多数的操作都以异步的方式进行调用,从文件读取到网络请求,均是如此。异步I/O意味着每个调用之间无须等待之前的I/O调用结束,在编程模型上可以提升效率。如果存在两个文件读取任务,最终的耗时只取决于最慢的那个文件读取耗时,对于同步I/O而言,他的耗时是两个任务之和。

3、 事件驱动机制

Node.js采用事件驱动和异步回调的机制。在执行代码的时候,主线程从上往下依次执行,遇到有需要回调的地方,就将此处加入到事件队列中,然后主线程继续往下走,直到运行结束以后才去执行事件队列中的回调。

Node.js去执行事件队列中的事件时,如果遇到回调,依然是按照顺序添加进入事件队列,主线程依次往下执行,遇到回调就添加,直至执行完毕。

Node.js是一个单线程多进程的。Node.js进程创建一个循环,每个循环就是一个周期,在循环中会从事件队列里查看是否有事件需要处理,如果有就去除事件并执行相关的函数。对于阻塞事件的处理在幕后使用线程池来确保工作的运行,而不占用主循环流程。

4、 跨平台

Node.js是跨平台的,即同样的一套JS代码都可以部署运行在Windows、Linux、OSX等平台。这主要得益于Node在操作系统与Node上层模块系统之间构建了一层平台层架构libuv。

二、Node.js 适用场景

1、 I/O密集型场景

Node.js异步I/O的特点使得他可以轻松面对I/O密集型的业务场景,处理效率将比同步I/O高,虽然同步I/O可以采用多线程或者多进程的方式进行,但是相比Node.js自带异步I/O的特性来说,将增加对内存和CPU的开销。

2 、高并发场景

针对高并发请求场景,Node.js的异步I/O以及事件回调特点可以高效的处理并发请求。

3、 ResutFul API

这是Node.js最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。

4 、基础工具

可以做为基础工具,前端领域中的编译器、构建工具、搭建脚手架等。比较出名的例如 Webpack、Gulp 。

5、 大量Ajax请求的应用

例如个性化应用,每个用户看到的页面都不一样,缓存失效时,需要在页面加载的时候发起Ajax请求,Node.js能响应大量的并发请求。总而言之,Node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。




一周热门 更多>