首先,我想从模块为您娓娓道来Node。
JavaScript 自诞生以来,曾经没有人拿它当作一门真正的编程语言,认为它不过是一种网页小脚本而已,在Web1.0时代,这种脚本语言在网络中主要有两个作用:一个是表单校验,另一个是网页特效。另一方面,由于仓促被创造出来,它自身各种陷阱和缺点也被各种编程人员所诟病。直到Web2.0时代,前端工程师利用它大大的提升了网页上的用户体验。在这个过程中,B/S应用展现出比C/S应用优越的地方。至此,JavaScript才被广泛重视起来。
在Web2.0流行的过程中,各种前端库和框架被开发出来,它们最初用于兼容各个版本的浏览器,随后随着更多的用户需求在前端被实现,JavaScript也从表单校验跃迁到应用开发的级别上。在这个过程中,它大致经历了工具类库、组件库、前端框架、前端应用的变迁,如下图所示:
![](https://box.kancloud.cn/2016-08-25_57bdc8fb50916.png)
经历了长长的后天努力过程,JavaScript不断被类聚和抽象,以更好的组织业务逻辑。从另一个角度而言,它也道出了JavaScript先天就缺失的一项功能:**模块**。
在其它高级语言中,Java有类文件,Python有import机制,Ruby有require,PHP有include和require。而JavaScript通过 <script> 标签引入代码的方式显得杂乱无章,语言自身毫无组织和约束能力。人们不得不用命名空间等方式人为的约束代码,以求达到安全易用的目的。
但是看起来凌乱的JavaScript编程现状并不代表着社区没有进步,JavaScript的本地化编程之路一直在探索中。在Node出现之前,服务器端JavaScript基本没有市场,与欣欣向荣的前端JavaScript应用相比,Rhino等后端JavaScript运行环境基本只是用于小工具,但是经历十多年的发展后,社区也为JavaScript制定了相应的规范,其中CommonJS规范的提出算是最为重要的里程碑。
- 目录
- 第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 事件驱动与高性能服务器