《深入浅出nodejs》笔记

第二章:模块机制

总结:nodejs遵循commonjs规范,commonjs定义了模块、I/O、二进制、文件等规范,其中最重要的就是nodejs模块规范,下面总结一下nodejs的模块加载:
nodejs的模块分为核心模块和文件模块,核心模块在nodejs源代码编译中,已经编译进了二进制可执行文件中,只要node启动,就已经被加载到内存中,所以加载速度比较快。像文件模块就需要经历路径解析、文件定位和编译执行的过程。
路径解析可以是一个标识符、相对路径或者绝对路径,最终require方法会转换成真实路径。
文件定位包括文件扩展名分析和包目录分析等,其中文件扩展名没带时,是以.js .json .node的顺序进行解析的。
完成路径解析和文件定位后,node会新建一个模块对象,这时候就有了exports、module等变量,再具体的编译过程中,node会对加载的js文件进行头尾的包装(包装见下面示例代码),包装的过程中,将模块对象的module exports __filename __dirname等变量传递给function函数,这就是我们没有在js文件中定义module等变量,却可以使用的原因。

    //(function(exports, require, module, __filename, __dirname){//头
        var a = 123;
        exports.add = function(b){
            return a+b;
        }
        //...
    //});//尾

另外,node对于模块的加载是有缓存的,以减少二次引用时的性能开销(核心模块的缓存检查优先于文件模块的缓存检查)。

////////////////
笔记:

  1. nodejs特点:
    单线程、数据驱动、异步、速度快、耗费内存多

劣势:

  • 默认不支持多核,但可以用cluster实现
  • 不支持服务器集群 ,但可以用node-http-proxy实现
  • 借助nginx实现负载均衡
  • 灾难恢复 可以用node-cluster实现

你可能感兴趣的:(《深入浅出nodejs》笔记)