Skip to content

Latest commit

 

History

History
50 lines (33 loc) · 3.09 KB

nodejs-power.md

File metadata and controls

50 lines (33 loc) · 3.09 KB

Node.js 基础知识

  1. 为什么要用node?

Node.js优点:

1、采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。而且JavaScript也简单易学,很多前端设计人员可以很快上手做后端设计。 2、Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务。 3、Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。

Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。

Node.js缺点:

1、可靠性低 2、单进程,单线程,只支持单核CPU,不能充分的利用多核CPU服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。不过以上缺点可以可以通过代码的健壮性来弥补。

目前Node.js的网络服务器有以下几种支持多进程的方式:

#1 开启多个进程,每个进程绑定不同的端口,用反向代理服务器如 Nginx 做负载均衡,好处是我们可以借助强大的 Nginx 做一些过滤检查之类的操作,同时能够实现比较好的均衡策略,但坏处也是显而易见——我们引入了一个间接层。

#2 多进程绑定在同一个端口侦听。在Node.js中,提供了进程间发送“文件句柄” 的功能,这个功能实在是太有用了(貌似是yahoo 的工程师提交的一个patch) ,不明真相的群众可以看这里: Unix socket magic#3 一个进程负责监听、接收连接,然后把接收到的连接平均发送到子进程中去处理。在Node.js v0.5.10+ 中,内置了cluster 库,官方宣称直接支持多进程运行方式。Node.js 官方为了让API 接口傻瓜化,用了一些比较tricky的方法,代码也比较绕。这种多进程的方式,不可避免的要牵涉到进程通信、进程管理之类的东西。此外,有两个Node.js的module:multi-node 和 cluster ,采用的策略和以上介绍的类似,但使用这些module往往有一些

缺点:#1 更新不及时#2 复杂庞大,往往绑定了很多其他的功能,用户往往被绑架#3 遇到问题难以解决

  1. node的构架是什么样子的?

node有哪些核心模块? node有哪些全局对象? process有哪些常用方法? console有哪些常用方法? node有哪些定时功能?

Node.js 事件

Promise 中 .then 的第二参数与 .catch 有什么区别? Eventemitter 的 emit 是同步还是异步? 如何判断接口是否异步? 是否只要有回调函数就是异步? nextTick, setTimeout 以及 setImmediate 三者有什么区别? 如何实现一个 sleep 函数? 如何实现一个异步的 reduce? (注:不是异步完了之后同步 reduce) node中的事件循环是什么样子的? 什么是EventEmitter? 如何实现一个EventEmitter? EventEmitter有哪些典型应用? 怎么捕获EventEmitter的错误事件? EventEmitter中的newListenser事件有什么用处?