Node 是一个基于 Chrome JavaScript 运行时建立的平台, 可以方便地搭建响应速度快, 易于扩展的网络应用. Node 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效, 非常适合在分布式设备上运行数据密集型的实时应用.
Node.JS 的特点:
它是一个 JavaScript 运行环境
依赖于 Chrome V8 引擎进行代码解释
事件驱动
非阻塞 I/O
轻量, 可伸缩, 适于实时数据交互应用
单进程, 单线程
Node.JS 的缺点:
1, 不适合 CPU 密集型应用;
CPU 密集型应用给 Node 带来的挑战主要是: 由于 JavaScript 单线程的原因, 如果有长时间运行的计算 (比如大循环), 将会导致 CPU 时间片不能释放, 使得后续 I/O 无法发起;
解决方案: 分解大型运算任务为多个小任务, 使得运算能够适时释放, 不阻塞 I/O 调用的发起;
2, 只支持单核 CPU, 不能充分利用 CPU
3, 可靠性低, 一旦代码某个环节崩溃, 整个系统都崩溃
原因: 单进程, 单线程
解决方案:
1),Nnigx 反向代理, 负载均衡, 开多个进程, 绑定多个端口;
2), 开多个进程监听同一个端口, 使用 cluster 模块;
4, 开源组件库质量参差不齐, 更新快, 向下不兼容
5,Debug 不方便, 错误没有 stack trace
Node.JS 的应用场景:
实时应用: 如在线聊天, 实时通知推送等等 (如 socket.io)
分布式应用: 通过高效的并行 I/O 使用已有的数据
工具类应用: 海量的工具, 小到前端压缩部署 (如 grunt), 大到桌面图形界面应用程序
游戏类应用: 游戏领域对实时和并发有很高的要求 (如网易的 pomelo 框架)
Node.JS 不适合场景:
CPU 使用率较重, IO 使用率较轻的应用 -- 如视频编码, 人工智能等, Node.JS 的优势无法发挥简单 web 应用 -- 此类应用的特点是, 流量低, 物理架构简单, Node.JS 无法提供像 Ruby 的 Rails 或者 Python 的 Django 这样强大的框架
来源: http://www.css88.com/qa/node-js/12003.html