自项目开始之后短短四年多时间里,Node变得非常热门,使用者也非常多。这些使用者对Node的各自倚重点也各不相同。经过整理,主要有以下几类:
* **前后端编程语言环境统一**。这类倚重点的代表是雅虎。雅虎开放了Cocktail框架,利用自己深厚的前端沉淀,将YUI3这个前端框架的能力借助Node延伸到服务器端,使得使用者摆脱了日常工作中一边些JavaScript一边些PHP所带来的上下文交换负担。
* **Node带来的高性能I/O用于实时应用**。Voxer将Node应用在实时语音上。国内腾讯的朋友网将Node应用在长链接中,以提供实时功能,花瓣网、蘑菇街等公司通过socket.io实现实时通知的功能。
* **并行I/O使得使用者可以更高效的利用分布式环境**。阿里巴巴和eBay是这方面的典型。阿里巴巴的NodeFox和eBay的q1.io都是借用Node并行I/O的能力,更高效的使用已有的数据。
* **并行I/O,有效利用稳定接口提升Web渲染能力**。雪球财经和LinkedIn的移动版网站均是这种案例,撇弃同步等待式的顺序请求,大胆采用并行I/O,加速数据的获取进而提升Web的渲染速度。
* **云计算平台提供Node支持**。微软将Node引入Azure的开发中,阿里云、百度均纷纷在云服务器上提供Node应用托管服务,Joynet更是云计算中提供Node支持的代表。这类平台看重JavaScript带来的开发上的优势,以及低资源占用、高性能的特点。
* **游戏开发领域**。游戏领域对实时和并发有很高的要求,网易开源了pomelo实时框架,可以应用在游戏和高实时应用中。
* **工具类应用**。过去依赖Java或其它语言构建的前端工具类应用,纷纷被一些前端工程师用Node重写,用前端熟悉的语言为前端构建熟悉的工具。
- 目录
- 第1章 Node 简介
- 1.1 Node 的诞生历程
- 1.2 Node 的命名与起源
- 1.2.1 为什么是 JavaScript
- 1.2.2 为什么叫 Node
- 1.3 Node给JavaScript带来的意义
- 1.4 Node 的特点
- 1.4.1 异步 I/O
- 1.4.2 事件与回调函数
- 1.4.3 单线程
- 1.4.4 跨平台
- 1.5 Node 的应用场景
- 1.5.1 I/O 密集型
- 1.5.2 是否不擅长CPU密集型业务
- 1.5.3 与遗留系统和平共处
- 1.5.4 分布式应用
- 1.6 Node 的使用者
- 1.7 参考资源
- 第2章 模块机制
- 2.1 CommonJS 规范
- 2.1.1 CommonJS 的出发点
- 2.1.2 CommonJS 的模块规范
- 2.2 Node 的模块实现
- 2.2.1 优先从缓存加载
- 2.2.2 路径分析和文件定位
- 2.2.3 模块编译
- 2.3 核心模块
- 2.3.1 JavaScript核心模块的编译过程
- 2.3.2 C/C++核心模块的编译过程
- 2.3.3 核心模块的引入流程
- 2.3.4 编写核心模块
- 2.4 C/C++扩展模块
- 2.4.1 前提条件
- 2.4.2 C/C++扩展模块的编写
- 2.4.3 C/C++扩展模块的编译
- 2.4.2 C/C++扩展模块的加载
- 2.5 模块调用栈
- 2.6 包与NPM
- 2.6.1 包结构
- 2.6.2 包描述文件与NPM
- 2.6.3 NPM常用功能
- 2.6.4 局域NPM
- 2.6.5 NPM潜在问题
- 2.7 前后端共用模块
- 2.7.1 模块的侧重点
- 2.7.2 AMD规范
- 2.7.3 CMD规范
- 2.7.4 兼容多种模块规范
- 2.8 总结
- 2.9 参考资源
- 第3章 异步I/O
- 3.1 为什么要异步I/O
- 3.1.1 用户体验
- 3.1.2 资源分配
- 3.2 异步I/O实现现状
- 3.2.1 异步I/O与非阻塞I/O
- 3.2.2 理想的非阻塞异步I/O
- 3.2.3 现实的异步I/O
- 3.3 Node的异步I/O
- 3.3.1 事件循环
- 3.3.2 观察者
- 3.3.3 请求对象
- 3.3.4 执行回调
- 3.3.5 小结
- 3.4 非I/O的异步API
- 3.4.1 定时器
- 3.5 事件驱动与高性能服务器