前端模块化方案requireJs和seaJs
来源:互联网 发布:算法 塞奇威克 pdf 编辑:程序博客网 时间:2024/05/16 03:14
AMD-requirejs
AMD
是异步模块定义,典型实现requirejs
,只要在define
或者全局require
中引用了某个模块,则此模块就已经被下载且用script
标签包裹并添加到页面head
中,且利用关键词async
和页面并行加载,当模块加载完成后,按序执行模块内容,当所有模块都加载完成后,执行回调函数,回调函数不会阻塞页面其他部分的执行。
关键:
- 依赖前置
- 模块加载后立即执行,所有模块加载完成后执行回调函数,当然模块执行后才会执行回调函数
- 局部
require
可将模块的加载推迟到模块使用时,即使用时才向head
标签加入script
举例
test.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> console.log('DOM树开始构建'+Date.now()); window.onload = function () { console.log('window onload'+Date.now()); } </script></head><body><div id="a">CLICK ME</div><script type="text/javascript"> console.log('requirejs未执行,马上执行'+Date.now());</script><script src="require.js" data-main="main.js"></script></body></html>
a.js
define(function () { console.log('a开始'+Date.now()); function aa() { console.log('aa'); } console.log('a结束'+Date.now()); return { aa:aa }});
b.js
define(function () { console.log('b开始'+Date.now()); function bb() { console.log('bb'); } console.log('b开始'+Date.now()); return { bb:bb, }});
main.js
require(['a'],function (a) { a.aa(); console.log('main开始'+Date.now()); document.getElementById('a').onclick = function () { var b = require(['b'],function (b) { b.bb(); }); console.log('after b') }; console.log('main执行完成'+Date.now());});
页面点击CLICK ME
后:
DOM树开始构建1503574029463test.html:16 requirejs未执行,马上执行1503574029468test.html:9 window onload1503574029548a.js:5 a开始1503574029600a.js:11 a结束1503574029600a.js:8 aamain.js:6 main开始1503574029601main.js:13 main执行完成1503574029601main.js:11 after bb.js:5 b开始1503574284947b.js:10 b开始1503574284947b.js:8 bb
未点击页面click之前,控制台资源列表项中没有b.js
,说明,局部require
进来的依赖未加载,而全局依赖a.js
已加载。且模块加载都是在window.onload
后开始的
CMD-seajs
CMD是通用模块定义,内部用Function.toString()
查找require
关键词,因此不管是模块有没有用到,都会加载出来,但是模块并不会提前执行。只有当用require
引用模块时才会执行模块。
seajs
只将main.js
用async
属性插入script
标签到head
中,目的是为了加载main.js
,此时其他模块都未加载出来,当main.js
加载完成后立即加载main
中require
引用的所有模块,main.js
执行完成后就将head
中的main.js script
标签删除。
关键
- 依赖就近
- 提前加载
- 延迟执行
requirejs
中的模块一般在main.js
的方法执行之前执行,但是seajs
会在使用时执行。
举例
//test.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="a">CLICK ME</div><script src="sea.js" data-main="main.js"></script><script>seajs.use('main.js')</script></body></html>
main.js
define(function (require,exports,module) { console.log('in main 1'); var a = require('./a'); console.log('in main 2'); document.getElementById('a').onclick = function () { var b = require('./b'); b.b(); }; a.a();});
a.js
define(function (require,exports,module) { console.log('in a'); function a() { console.log('a function'); } module.exports = { a:a };});
b.js
define(function (require,exports,module) { console.log('in b'); function b() { console.log('b function'); } module.exports = { b:b };});
在未点击页面click
之前,b.js已经在控制台资源列表中了。点击页面CLICK ME之后控制台输出:
main.js:5 in main 1//说明main.js先执行a.js:5 in amain.js:7 in main 2a.js:7 a functionb.js:5 in bb.js:7 b function
阅读全文
0 0
- 前端模块化方案requireJs和seaJs
- 【学习】前端模块化——SeaJS和RequireJS
- 模块化以及requirejs和seajs
- Seajs和requireJS的模块化开发总结
- 模块化,requirejs 和 seajs 的异同
- 支持seaJs和requireJs的前端模块开发方案(一):方案介绍
- 模块化JS(RequireJS SeaJS)
- javascript模块化编程-如何使用seajs和requirejs
- 支持seaJs和requireJs的前端模块开发方案(二):业务页面和入口脚本init.js
- 支持seaJs和requireJs的前端模块开发方案(四):AMD模式和CMD模式下的config.js
- 前端模块化方案的比较(webpack/require.js/seajs/browserify
- 支持seaJs和requireJs的前端模块开发方案(三):加载器全局配置alias.js
- requirejs前端模块化
- requireJS和seajs区别?
- 模块化前端编程 seajs使用
- RequireJS 和 SeaJS的区别
- seajs和requirejs技术指导文档
- seajs 和 requirejs 的异同
- UVA
- 子雨大数据之Spark入门教程---Spark简介1.1
- 常用浏览器内核驱动下载地址
- 数据库索引及分类
- python学习day01
- 前端模块化方案requireJs和seaJs
- 深入剖析Java中的装箱和拆箱
- 编写restful api
- 欢迎使用CSDN-markdown编辑器
- C#基础-006(4)if练习 比较控制台输入的两个数字的大小
- gradle project sync completed error
- Vim比较两个文本的内容
- poj3169 Layout
- enable cef support pepflashplayer