028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Node基础——认识Node-创新互联

什么是Node

首先JavaScript是一门编程语言,就像Java、Python、C#、GO一样,在Node出来之前,JavaScript主要运行于浏览器中,用来控制页面的展示逻辑,以及交互操作等。JavaScript之所以能够在浏览器中执行,是因为浏览器中都有JavaScript的解析引擎,不同的浏览器的解析引擎是不同的。

成都创新互联服务项目包括聊城网站建设、聊城网站制作、聊城网页制作以及聊城网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,聊城网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到聊城省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

当然除了这些解析引擎外还有其他的解析引擎:比如说quickjs等。

那么JavaScript是如何和浏览器进行交互的,我们都知道,浏览器是用C++进行编写的,他会去解析Html,Css等进行渲染,因为这些都是规则(也就是约定,或者是接口)。对于JavaScript也一样,浏览器也会提供一些接口,然后,解析器将我们的JavaScript规则转换成调用浏览器接口的东西,这样就促成了JavaScript和浏览器的交互。

而Node就是建立的在V8解析引擎上面,将调用系统的功能进行了封装,而中间

Node的特点

对NodeJs其特点有以下几个方面:

  1. Node是一个Javascript运行环境,依赖于Chrome V8引擎进行代码解释
  2. 单进程,单线程(这里指主线程)
  3. 非阻塞I/O
  4. 异步事件驱动
  5. 性能出众

接下来就意义介绍其上述的几个特点:

Node是一个JavaScript运行环境,依赖于Chrome V8引擎进行代码解释

简单来说,CPU并不认识我们的JavaScript代码,而不同的CPU只认识自己对应的指令集,JavaScript引擎将js代码编译成CPU认识的指令集,当然除了编译之外还要负责执行以及内存的管理。另外JavaScript是解释形语言,由引擎直接读取源码,一边编译一边执行,这样效率相对较低,而编译形语言(如c++)是把源码直接编译成可直接执行的代码执行效率更高。而V8引擎则是一种高效的JavaScript的引擎

V8引擎是一个JavaScript引擎实现,最初由一些语言方面专家设计,后被谷歌收购,随后谷歌对其进行了开源。V8使用C++开发,,在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。V8支持众多操作系统,如windows、linux、android等,也支持其他硬件架构,如IA32,X64,ARM等,具有很好的可移植和跨平台特性。

单进程,单线程(这里指主线程)

对于NodeJS来说,其中的JavaScript的执行是单线程的(这里的单线程是指主线程是单线程)。所有的任务都放在同一个任务执行队列里面去(当然任务会被分为基本任务,宏任务和微任务。只是不同的任务类型在任务队列里里面执行的方式不一样而已)。

非阻塞I/O

一个完整的IO请求的主要包括有两个阶段:

1、查看数据是否就绪;

2、进行数据拷贝(内核将数据拷贝到用户线程)。

阻塞(blocking IO)和非阻塞(non-blocking IO)的区别就在于第一个阶段,如果数据没有就绪,再查看数据是否就绪的过程中是一直等待,还是直接返回一个标志信息。

非阻塞,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。

异步事件驱动

这中间其实有三个概念,异步、事件和事件驱动。我们挨个介绍。

在Node底层采用了Libuv这个库,Libuv是一个跨平台的的基于事件驱动的异步io库。但是他提供的功能不仅仅是io,包括进程、线程、信号、定时器、进程间通信等。

性能出众

底层选择用c++和v8来实现的,上面第一点讲到过,nodejs的事件驱动机制,这意味着面对大规模的http请求,nodejs是凭借事件驱动来完成的,性能部分是不用担心的,并且很出色。

Node的优势Node有哪些缺点
  1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

  1. 只支持单核CPU,不能充分利用CPU

  2. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

原因:单进程,单线程

解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

(2)开多个进程监听同一个端口,使用cluster模块;

  1. 开源组件库质量参差不齐,更新快,向下不兼容

  2. Debug不方便,错误没有stack trace

Node适合用来干什么

前端工具的脚手架、辅助工具类

发展到api中间层、代理层

以及专业的后端开发

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:Node基础——认识Node-创新互联
本文地址:http://www.tsicrk.com/article/dcgoee.html

其他资讯

让你的专属顾问为你服务

1.8009s