请说明AMD与CMD这两种前端模块加载规范之间的差异。
考察说明
考查对前端模块化发展历史中AMD与CMD规范核心差异的理解。
回答思路
- 【回答框架 1】AMD(Asynchronous Module Definition)由RequireJS推广,特点是在定义模块时就声明所有依赖,并采用异步加载。其核心是提前执行依赖,即依赖前置,所有依赖在模块定义时就被加载并执行。
- 【回答框架 2】CMD(Common Module Definition)由SeaJS推广,特点是依赖就近,即在使用某个依赖时再require。CMD采用延迟执行,即在模块被执行时,才通过require加载依赖,更贴近CommonJS的写法。
- 【回答框架 3】两者的核心区别在于依赖注入时机和执行时机:AMD依赖前置且立即执行,CMD依赖就近且延迟执行。在性能上,AMD可能因预加载所有依赖导致初始加载较慢,但有利于并行加载;CMD的延迟执行可能减少初始加载量,但依赖关系不够显式。
- 【回答框架 4】在开发体验上,AMD的依赖列表清晰,便于静态分析,但需注意循环依赖问题;CMD的写法更接近同步编程,但难以静态分析依赖。选用时需结合项目需求,现代前端构建工具(如Webpack)已统一处理模块化,但理解历史规范有助于深入掌握模块化本质。
- 【关键点 1】AMD前置依赖并立即执行,CMD就近依赖并延迟执行。
- 【关键点 2】AMD由RequireJS实现,CMD由SeaJS实现。
- 【关键点 3】AMD依赖声明更显式,CMD代码更接近CommonJS。
- 【易错点 1】不要将同步加载与异步加载混为一谈,AMD和CMD都支持异步加载,区别在于依赖处理时机。
- 【易错点 2】注意AMD的依赖前置可能增加初始加载量,但并非全是劣势,需结合项目场景。
- 【易错点 3】循环依赖处理上,两者均有特殊处理,不能简单断言某一种绝对更优。