node.js
by-lenovointer
Move fast with stable infra
第一讲
什么是Node.js?
Node.js不是JS应用、而是JS运行平台
Node.js采用事件驱动(事件与回调函数)、异步编程(异步I/O),为网络服务而设计
JavaScript 单进程、单线程
编写高性能Web服务
主要框架express、koa 两个框架是同一个团队开发
node 运行环境组成
v8 engine(isolate, context, handles)
libuv(主要用于处理事件驱动的异步I/O模型库)
内建模块(JS模块叫“native module”,而C++模块叫“builtin module”)
V8 engine: C++中运行JS , C++的方法与属性暴露给js 使用
事件驱动与事件循环
I/O
PHP是完全同步阻塞的方式
node 异步、非阻塞
同步造成cup等待I/O,比如读取磁盘的一段文件,要在磁盘寻道、读取数据、复制数据到内存这个调用才结束。
数据进内存叫In,出内存叫Out
多线程 单线程
阻塞 非阻塞
同步 异步
多进程 单进程
模块与包管理工具
第一阶段:常常会把非常多复杂的功能 封装成一个个的函数
第二阶段:为了避免全局变量的污染,我们会将单个模块封装到一个对象内部
第三阶段:利用立即执行函数 来达到 不暴露私有成员的目的
模块与包管理工具
模块的分类
模块的流程
模块对象
模块导出Module.exports 与 exports
// 准备module对象:
var module = {
id: 'hello',
exports: {}
};
var load = function (module) {
// 读取的hello.js代码:
function greet(name) {
console.log('Hello, ' + name + '!');
}
module.exports = greet;
// hello.js代码结束
return module.exports;
};
var exported = load(module);
// 保存module:
save(module, exported);
你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports
模块的引用
模块的缓存
node包规范
package.json
部分Node核心模块
模块的使用场景
CommonJS 几乎全都是同步加载
AMD CMD 异步模块定义
运行效果
参考文献
《SQL注入》:http://baike.baidu.com/view/3896.htm
《数据库连接池》:http://baike.baidu.com/view/84055.htm
《segment fault 段异常各种原因》:http://www.myexception.cn/program/972764.html
《crontab命令》:http://baike.baidu.com/view/1229061.htm
《exec与spawn方法的区别与陷阱》:http://blog.csdn.net/bd_zengxinxin/article/details/9044989
《UNICODE,GBK,UTF-8区别》:http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html
《NodeJS笔记:处理非utf8编码(续)》:http://nodejs.lofter.com/post/3c14e_48aee
Node.js的线程和进程: http://www.admin10000.com/document/4196.html
Thanks!