commonjs与amd
2016-01-11 22:37
691 查看
ps:commonjs(cmd)同步加载这对服务器端不是一个问题,因为所有的模块都存放在服务器的本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态。
因此,浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景。
1. 什么是CommonJS?
CommonJS
是javascript模块化编程的一种规范,主要是在服务器端模块化的规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。
commonJS规范是同步的,主要是用在nodejs的服务器端的,因为同在一个硬盘所以加载起来比较快,不用考虑非同步加载的方式;
在CommonJS中有一个全局性方法require( ),用于加载模块。
//example.js
module.exports = function( ){ };
example.message = "hi";
//main.js
var example = require("./example");
CommonJS加载模块是同步的,只有加载完成,才能执行后面的操作,主要是由于服务端的编程模块文件都存在于本地硬盘,所以加载较快。
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。异步方式加载模块,模块的加载不影响它后面语句的执行。所有依赖这个模块的语句,都定义到一个回调函数中,等到加载完成之后,这个回调函数才会运行。
AMD规范是异步的,主要是用在浏览器端的,要从服务器端加载模块,这时就必须采用非同步模式;
AMD规范使用define方法定义模块:
define(["/libs/jquery"], function(jquery){
function log(){
alert("hello world!");
}
return {
log: log
}
});
当然AMD也允许输出模块兼容CommonJS规范:
define(function(require, exports, module){
var module = require("module");
module.doSometing( );
exports.do = function(){
module.doSometing( );
}
});
因此,浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景。
1. 什么是CommonJS?
CommonJS
是javascript模块化编程的一种规范,主要是在服务器端模块化的规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。
commonJS规范是同步的,主要是用在nodejs的服务器端的,因为同在一个硬盘所以加载起来比较快,不用考虑非同步加载的方式;
在CommonJS中有一个全局性方法require( ),用于加载模块。
//example.js
module.exports = function( ){ };
example.message = "hi";
//main.js
var example = require("./example");
CommonJS加载模块是同步的,只有加载完成,才能执行后面的操作,主要是由于服务端的编程模块文件都存在于本地硬盘,所以加载较快。
2. 什么是AMD 规范?
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。异步方式加载模块,模块的加载不影响它后面语句的执行。所有依赖这个模块的语句,都定义到一个回调函数中,等到加载完成之后,这个回调函数才会运行。AMD规范是异步的,主要是用在浏览器端的,要从服务器端加载模块,这时就必须采用非同步模式;
AMD规范使用define方法定义模块:
define(["/libs/jquery"], function(jquery){
function log(){
alert("hello world!");
}
return {
log: log
}
});
当然AMD也允许输出模块兼容CommonJS规范:
define(function(require, exports, module){
var module = require("module");
module.doSometing( );
exports.do = function(){
module.doSometing( );
}
});
相关文章推荐
- 【jsp+servelet】JSTL <c:out>使用 escapeXml 属性保持 HTML 格式编排
- PhantomJS
- jfreechart-改变图片存储位置-客户端jsp页面查看服务器绘图
- 深入浅出jsonp(转)
- JSON解析
- extjs desktop startmenu (開始菜单)
- pace.js和NProgress.js两个加载进度插件的一点小总结
- javaScript进阶篇ⅠJS基础语法
- Action返回自定义类的List集合通过JSP中的Struct2标签显示
- JS自动识别浏览器
- D3.js数据展现
- JS解析json数据(如何将json字符串转化为数组)
- JSP取得绝对路径
- JS时间戳和时间之间转换
- maven使用笔记一 下载json-lib引发的问题
- javascript中三种典型情况下this的含义
- 编写爬虫程序的神器 - Groovy + Jsoup + Sublime(转)
- angular.js[1]
- 阅读zepto.js的core中的Core methods
- JavaScript setInterval()執行clearInterval() 再恢復setInterval()