发表于: 2017-04-26 22:15:04

1 985


今天完成的事情:

完成了公司详情页和在招职位页的大部分内容,但是还有写样式需要调整;

今天学习了JS模块规范:AMDCMDCommonJS的一些知识;

明天计划的事:

修改公司详情页和在招职位页的样式;

做职位详情页;

遇到的问题:

一直无法导入数据,经过仔细检查发现接口写错了;

接近完工,但是还有不少细节需要修改,各种链接跳转需要整理;

收获:

1CommonJS

CommonJS规范是诞生比较早的。NodeJS就采用了CommonJS。是这样加载模块:

var clock = require('clock');

clock.start();

这种写法适合服务端,因为在服务器读取模块都是在本地磁盘,加载速度很快。但是如果在客户端,加载模块的时候有可能出现“假死”状况。比如上面的例子中clock的调用必须等待clock.js请求成功,加载完毕。

2AMD

AMD,即 (Asynchronous Module Definition),这种规范是异步的加载模块,requireJs应用了这一规范。先定义所有依赖,然后在加载完成后的回调函数中执行:

require([module], callback);

AMD写上一个模块:

require(['clock'],function(clock){

  clock.start();

});

AMD虽然实现了异步加载,但是开始就把所有依赖写出来是不符合书写的逻辑顺序的,能不能像commonJS那样用的时候再require,而且还支持异步加载后再执行呢?

3CMD

CMD (Common Module Definition), seajs推崇的规范,CMD则是依赖就近,用的时候再require。它写起来是这样的:

define(function(require, exports, module) {

   var clock = require('clock');

   clock.start();

});

AMDCMD最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。

AMD依赖前置,js可以方便知道依赖模块是谁,立即加载;而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块,这也是很多人诟病CMD的一点,牺牲性能来带来开发的便利性,实际上解析模块用的时间短到可以忽略。


返回列表 返回列表
评论

    分享到