amd vs cmd

花了点时间了解了一下markdown的语法(了解更多),很是感兴趣,平时用wordpress写博客的时候,也会经常调成文本模式,很不喜欢每次打了标签写完文字后还要闭合,相当的浪费时间。markdown就简单方便的多了,直接# * >开头就好了,有机会要转到markdown的写作平台去,暂时还是用着wordpress吧。。 另外,重新安装了nodejs,早就安装过了,但一直没有用过,这次在了解grunt的时候又拿出来用,发现有点问题,所以便卸了重装。官方现在是msi文件了,直接next就安装好了。但对grunt还是不太了解,不知道具体应该怎么操作,等更加系统的学习了nodejs后再来。了解grunt呢,是因为了解seajs,a module loader for web,类似的还有requirejs和commonjs,seajs和commonjs遵循的是cmd(common module definition)协议(CMD模块定义),而require遵循的是amd(asynchronous module definition)协议。二者有什么区别呢?引用玉伯前辈的一段话:
1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码: [php] // CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b.doSomething() // ... }) [/php] // AMD 默认推荐的是 [php] define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ... }) [/php] 虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。 3. AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。
了解更多相关内容请看这里,这是玉伯对比requirejs和seajs的异同文章,感觉主观护己的色彩很强,有点像老王卖瓜了。
posted @ 2013-04-21 15:54  echoHUST  阅读(529)  评论(0编辑  收藏  举报