首页 > 代码库 > <<深入浅出nodeJS>>读书笔记--<一>
<<深入浅出nodeJS>>读书笔记--<一>
前语:nodeJs这书早在五月份的时候就已经买了,那时候才刚刚接触node,本想着这书应该是node入门级比较系统化的书,可翻了几页之后呢,发现好多地方都晦涩难懂,特别是看到内建模块的C++实现时,瞬间有想瞌睡的感觉....-_-从这之后,这书一直被我闲置在书桌角落,再无动过,看书学习node的想法就这样放弃了,转为上网学习基础的语法API..就这样,边看API边跟着做一些小例子,慢慢的,发现基本的API用法都已经掌握了,于是,去搜搜与node有关的一些技术博客,希望能够进阶去了解node。开始去尝试用node做一些完整的小例子,比如简单的博客实现,聊天室...就这么过了两个月左右,发现对node的了解基本上已经算是有了一个全面大致的认识了,所有的知识点都了解得差不多了,于是开始着手去实现一个简单的订餐app,在此之前,为了能够强化所有知识点以便顺利完成服务器端的编写,再一次翻开了那本稍有些许灰尘的<<深入浅出nodeJs>>,这一次,没有了初次的那种陌生羞涩感,有的只是对现有知识体系的扩充与强化,那么,我将用自己的语言来将这本书中的重要知识点一一记下来....
第一章 概述
node的起源及基本作用
node的特点:
1、异步I/O (发送请求与处理请求互不干扰)
2、事件与回调函数(node是事件驱动的)
3、单线程
4、共享平台 (linux和window)
node的应用场景:
1、I/O密集型
2、分布式应用
第二章 模块机制
node是基于javascript,而javascript本身又是有许多先天不足的,而且它的使命是为了服务客户端,对于服务器端的支持 (模块系统,标准库,标准接口,缺乏包管理系统),简直就是不了了之,根本就不在意.好在,CommonJS规范面世了,它的使命就是 希望Javascript能够在任何地方运行.
commonJS对模块的定义有三个部分,分别是:1、模块引用 2、模块定义 3、模块标识
-require
-exports
-module
1、模块引用:
var math = require (‘math‘);
2、模块定义:
//math.jsexports.add = function (){ var sum = 0; while (sum < 10){ sum += 1; } return sum; }
然后通过,require来引入模块,就可以调用定义的属性和方法了.require == exports
3、模块标识:
传递给require方法的参数 , 字符串或路径
2.2 Node的模块实现
在Node中引入模块,经历三个步骤:
(1) 路径分析
-- 核心模块 , fs http
-- 文件模块 , .或者..开始的相对路径文件模块
-- 以/开头的绝对路径模块
-- 非路径形式的内建模块,如自定义的connect模块
(2) 文件定位
-- 按路径
-- 按后缀名, .js 、.node 、.json
(3) 编译执行
-- javascript 核心模块,经历标识符分析后,直接定位到内存中,比普通的文件模块从磁盘中查找要快得多
-- c++内建模块,二进制、数组、内存,使用Binding()方法来协助加载内建模块
如何编写: NODE_MODULE()最底层 --> process.binding 定义到内存中
如何导出:层级依赖关系,内建c++ --> 核心模块Javascript --> 文件模块
2.3 包与NPM
模块组织代码,包组织模块
package.json描述文件,dependencies:依赖的包列表
发布包, npm publish <folder>
2.4 前后端共用模块
前后端模块的侧重点不同。前端需要重服务器加载,用到了异步加载模块,后端的模块都存在本地,用到了同步加载。
CommodJs规范:同步模式,适用后端
AMD规范:异步模式,适用前端
CMD规范:国人自创,前两者的结合体,加载和定义类似AMD,模块导出和引入接近CommonJs规范的定义
兼容多种规范的定义:
为了让同一模块可以在前后端运行,实现如下:
<<深入浅出nodeJS>>读书笔记--<一>