AMD时RequireJS在推广的过程中对模块定义的规范化产出,RequireJS在主文件里是将所有的文件同时加载。
CMD是SeaJS在推广过程中对模块定义的规范化产出,SeaJS强调一个文件一个模块。‘
AMD推崇依赖前置:在定义模块的时候要先声明其依赖的模块,所以JS可以及其轻巧地知道某个模块依赖的模块是哪一个,因此可以立即加载那个模块,也就是提前执行 。
CMD推崇依赖就近:它只要依赖的模块在附近就可以了 ,因此它要等到所有的模块变为字符串,解析一遍之后才知道他们之间的依赖关系,CMD加载完某个模块后没有立即执行而是等到遇到require语句的时再执行,也就是延迟执行 。
他们两者的目的都是为了 JavaScript 的模块化开发,但其不同导致各自的优点是:
AMD用户体验好,因为模块提前执行了;
CMD性能好,因为只有用户需要的时候才执行。