谈到模块化,最著名的就是三份规范——CommonJs、AMD、CMD。不过我总是搞混,列几个知识点,留个档科普自己😝
服务端(CommonJs) vs 浏览器(AMD/CMD)
三种规范中,CommonJs主要针对服务端,而AMD/CMD主要针对浏览器。
服务端采用一般采用同步加载文件,但浏览器因为要保证效率,需要异步加载。
AMD vs CMD
AMD和CMD都属于异步加载,两者的区别在于执行机制。
AMD会提前执行,在并行加载文件的同时,会解析执行该模块。由于涉及到执行,所以在加载模块之前,需要先加载完成该模块的依赖模块。
CMD则是延迟执行,在加载文件的时候并不会执行,而是在需要的时候才执行。
这也造成了两者不同的优劣势。
AMD因为提前执行,加载速度快,尤其是遇到多个大文件时,又是尤为明显。
CMD的优点在于延迟执行使文件的执行顺序更为可控。
而两者的优点恰好又互为对方的缺点。
实现
CommonJs | AMD | CMD |
---|---|---|
NodeJS | RequireJS | SeaJS |