var myModule = require('./myModuleDir');
1. Node 首先在当前目录下查找;
- Node 会假设这个文件夹是一个包,然后查找对包的定义;包是由一个名为package.json的文件定义的.
- 如果一个文件夹不包含package.json文件,这个包的入口会假设是index.js,Node会查找index.js文件,
这个例子会查找./myModuleDir/index.js;
- 如果在模块目录下有一个 package.json 文件,Node 会解析这个文件,查找并使用main属性定义的路径作为入口;
例如 ./myModuleDir/package.json文件是下面这样,Node will 会加载./myModuleDir/lib/myModule.js文件
{
"name" : "myModule",
"main" : "./lib/myModule.js"
}
buffer类中数据的内存是在js VM 内存堆的外面分配的;
也就是说这些对象并不会被垃圾回收算法清理;会永久留在这个内存地址里;
节省了cpu本来需要复制buffer内容的内存副本的周期;
在 Node里, 事件循环运行在一个环形的事件队列中;
每次循环事件执行叫做一个tick;
可以预定一个回调函数,在下次事件(next tick)调用的时调用;
然而setTimeout使用了js运行时,它有自己的调度队列;
process.nextTick 函数是Node事件循环特定的;
Node很有用的一个概念是很容易生产和消费来自不同源的steam流;
HTTP是Node里的一类协议,HTTPT响应是没有分别的;
http代码块运行服务器保持发送数据到客户端,但是不发送文件体的大小size;
除非在header里用Content-Length指定;
Node HTTP服务端会发送Transfer-Encoding: chunked头信息;
根据http规范,这个头信息通知客户端接收代码块作为响应体,在客户端终止响应之前发送长度为0的最终块
这对刘文斌,音频,视频等数据非常有用;