1、什么是nodejs?

  简单的说 Node.js 就是运行在服务端的 JavaScript。

  Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

  Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。(不用考虑兼容性问题)

  Node.js是JS的一种运行环境,node.js为JS提供操作文件、创建http服务、创建TCP、UDP服务等接口,所以Node.js可以完成其他后台语言能完成的工作。

2、什么是交互式运行环境

  在cmd中输入node回车进入的谷歌的控制台界面叫做repl交互式运行环境,

  REPL:Read-Eval-Print-Loap,即读-计算-写-循环,描述了其四项基本功能。

  REPL是可交互运行环境,开发者可以在该运行环境中输入任何JavaScript表达式,回车后运行环境会显示结果。REPL是为了开发者方便测试JavaScript代码。

3、REPL中的基础命令:

  break:放弃或重写当前函数(ctrl+c);

  clear:清楚REPL上下文中保存的所有变量和函数;

  exit:退出REPL运行环境(ctrl+d);(按两次ctrl + c 也可以退出)

  help:显示所有命令提示;

  save:把输入的所有表达式保存到一个文件中;

  load:把某文件中保存的所有表达式一次加载到REPL;

4、NodeJS的特点

  1. 它是一个Javascript运行环境

  2. 依赖于Chrome V8引擎进行代码解释

  3. 事件驱动

  4. 非阻塞I/O

  5. 轻量、可伸缩,适于实时数据交互应用

  6. 单进程,单线程

5、NodeJS带来的对系统瓶颈的解决方案

  1. 并发连接    

    更改连接到服务器的方式,每个连接发射(emit)一个在NodeJS引擎进程中运行的事件(Event),放进事件队列当中,而不是为每个连接生成一个新的OS线程(并为其分配一些配套内存)

    (1)系统线程模型:

    (2)多线程、线程池模型:

    (3)异步、事件驱动模型

  2. I/O阻塞 

    NodeJS遇到I/O事件会创建一个线程去执行,然后主线程会继续往下执行的,因此,拿profile的动作触发一个I/O事件,马上就会执行拿timeline的动作,两个动作并行执行,假如各需要1S,那么总的时间也就是1S。

    它们的I/O操作执行完成后,发射一个事件,profile和timeline,事件代理接收后继续往下执行后面的逻辑,这就是NodeJS非阻塞I/O的特点。

 

    (1)串行获取数据

    (2)NodeJS非阻塞I/O,发射/监听事件来控制执行过程

6、NodeJS的优缺点

  优点:

    1. 高并发(最重要的优点)

    2. 适合I/O密集型应用

  缺点:

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

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

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

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

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

7、适合NodeJS的场景

  NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

  1. RESTful API

    这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,

    入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。

  2. 统一Web应用的UI层

    目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,

    更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,

    他们也不用管用户数据更新是通过Ajax异步获取的还是通过刷新页面。

  3. 大量Ajax请求的应用

    例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。

posted on 2019-03-04 19:19  薇依  阅读(399)  评论(0编辑  收藏  举报