NodeJs 相关知识点总结

一、什么是nodejs?node

  简单的说 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能够完成其余后台语言能完成的工做。浏览器

二、什么是交互式运行环境缓存

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

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

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

三、REPL中的基础命令:并发

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

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

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

  help:显示全部命令提示;

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

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

四、NodeJS的特色

  1. 它是一个Javascript运行环境

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

  3. 事件驱动

  4. 非阻塞I/O

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

  6. 单进程,单线程

五、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,发射/监听事件来控制执行过程

六、NodeJS的优缺点

  优势:

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

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

  缺点:

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

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

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

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

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

七、适合NodeJS的场景

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

  1. RESTful API

    这是NodeJS最理想的应用场景,能够处理数万条链接,自己没有太多的逻辑,只须要请求API,组织数据进行返回便可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。因为响应是少许文本,

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

  2. 统一Web应用的UI层

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

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

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

  3. 大量Ajax请求的应用

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

相关文章
相关标签/搜索