AMD规范

一 简介

1. 为什么模块很重要?

有了模块,就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。

前提是大家必须以同样的方式编写模块。ES6之前通行的JS模块规范共有两种:CommonJS和AMD

2. AMD诞生背景

在js模块规范出现之前,js可以使用(1)不同的函数(2)对象(3)立即执行函数(4)放大模式 等形式实现模块化,但各有缺点。具体可参考:Javascript模块化编程(一):模块的写法(阮一峰)

有了服务器端模块(nodejs的commonjs规范)以后,大家就想要客户端模块。而且最好两者能兼容,一个模块不用修改,在服务器和浏览器都可以运行。

CommonJS规范不适用于浏览器环境,原因是:

一个模块如果加载时间很长,整个应用就会停在那等。 对服务器端不是问题,因为所有模块都存放在本地硬盘,可同步加载完,等待时间是硬盘读取时间。但对浏览器却是大问题,模块都放在服务器端,等待时间取决于网速快慢,可能要等很长时间,浏览器处于"假死"状态。

因此,浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景。

3. AMD定义

AMD(Asynchronous Module Definition),意思是"异步模块定义"。它用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才运行。

AMD也用require()加载模块,但不同于CommonJS,它要求两参数:   

require([module], callback);

第一个参数[module],是一个数组,里面的成员是要加载的模块;第二个参数callback,是加载成功之后的回调函数。

require.js就是AMD规范的一种实现。

1用途

(1)适用场景

AMD规范则可以异步加载模块,允许指定回调函数

浏览器环境,要从服务器端加载模块,就必须采用非同步模式,因此浏览器端一般采用AMD规范

2优缺点及对比

(1)优点

(2)缺点

(3)特点与对比

二 基本概念与技术重点整理

(1)AMD模块规范基础

AMD规范使用define方法定义模块

(2)AMD规范的一种实现-require.js的用法

三 使用实践及案例

四 资源与参考

1官网

amdjs-api

2文档

3源码

4教程

(1)已学习:

Javascript模块化编程(一):模块的写法(阮一峰)

Javascript模块化编程(二):AMD规范 (阮一峰)

(2)学习中:

(3)待学习:

官方教程:

其他教程:

5工具与资源

results matching ""

    No results matching ""