全栈之路Node.js系列(一)之十问Node.js

前言

这篇文章是全栈之路Node系列文章的开篇之作,Node自从2009年推出以来,经过11年的发展,Node势头越来越猛,各种框架如Express ,Koa等层出不穷,生态也越来越完善。由于JS的缘故,Node也成为了前端工程师走向全栈的捷径,今天我们通过十问Node来初步了解一下Node。

Node.js是什么?

Node.js是一个基于Google所开发的浏览器Chrome V8引擎的Javascript的一个运行环境,这个运行环境包括了运行代码所需要的编译器(解释器)以及操作系统的底层支持等。

Node.js可以用来干什么?

有了Node.js我们就可以使用JavaScript写一些系统级或者服务端的代码。可能有人会问为什么在Node之前不可以?那是因为JavaScript设计的初衷其实是一门前端语言,它没有文件读写等系统调用的接口,而后端系统最基本的就是文件读写,所以在Node.js出现之前无法写后端系统。

Node.js的特点是什么?

  • 异步I/O
  • 事件驱动和回调函数
  • 单线程
  • 跨平台

Node.js的优势是什么?

Node.js擅长I/O密集型的应用场景是它的一大优势,Node面向网络且擅长处理并行I/O,这主要得益于Node事件循环的处理能力,而不是为每一个请求服务启动一个线程,资源占用极少。

什么是事件驱动?

在可交互的用户页面上,用户会产生一系列的事件,包括单击按钮,拖动元素等,这些事件会按照顺序加载到一个队列中去,除去页面事件之外,还有一些AjAx执行成功、文件读取完毕等事件。Node.js的设计思想是以事件驱动为核心,它提供的绝大多数API都是基于事件的、异步的风格。以Net模块为例,其中仅仅是net.Socket对象的事件就包括connect,data,timeout等,使用Node.js的开发人员需要更具自己的业务逻辑注册相应的回调函数。

同步和异步的区别是什么?

同步和异步是描述线程/进程的调用方式,同步调用是指进程/线程发起调用后,一直等待调用返回后才继续执行下一步操作,但是并不意味着cpu停止工作,cpu这时会切换到另一个线程继续执行,等到调用返回后再切换回原来的进程/线程。异步就是恰恰相反,当发起调用后会继续向下执行,当调用返回后,通过某种手段通知调用者。

阻塞IO与非阻塞IO的区别是什么?

在Node中,IO特指Node程序在libuv的支持下与系统磁盘和网络交互的过程。对于IO而言,通常可以分为两个部分,一个是数据准备阶段,一个是返回结果,阻塞IO在进程发起一个调用后一直在等待上述两个阶段完成,等待拿到返回结果后再重新运行。非阻塞IO和上面的过程类似,只不过如果数据还没有继续,就会马上返回一个结果告诉进程还没有就绪。

单线程的优势和劣势是什么?

Node保持了JavaScript在浏览器中单线程的特点,而且在Node中JavaScript与其他线程无法共享任何状态。它最大的优势在于不同在意同步问题,也没有死锁的存在,也没有线程切换所带来的开销。单线程的弱点在于,无法利用多核CPU,错误会引起整个应用退出,应用的健壮性值得考虑,还有就大量计算占用CPU导致无法继续调用异步方法。

Node.js的劣势是什么?

Node缺点在于Debug 很困难。由于没有 stack trace,出了问题很难查找问题的原因。如果设计不好,很容易就让代码充满了 callback 。

你可能感兴趣的:(node.js)