Javascript模块化编程-require.js[3]
很多情况下,JS都是放到一个或者多个文件里,只要加载这些文件就可以了。
但是对于一些小型项目而言,这种写法是没有任何问题的。
但是对于某些大型网站,JS的量是很大的,如果还采用这种方式,网站时常在加载时,出现假死的现象。
为了解决这个问题,require.js应运而生。
1、require.js的核心
1、实现js文件异步加载,避免网站失去响应。
2、管理模块之间的依赖性,便于代码的编写和维护。
2、require.js的加载
在网页加载require.js时,需要实现如下写法:
<script src="js/require.js" defer async="true" data-main="js/jsname"></script>
defer兼容IE。
async=“true”兼容其它常规浏览器。
data-main属性的作用:加载当前网页的主模块。
3、主模块的写法
主模块即当前网页的主程序。
主模块依赖其它模块,此时,需要AMD规范定义require()函数。
Eg:
require(['moduleA','moduleB','moduleC',function(moduleA,moudleB,moduleC){
//...
}]);
第一个参数:所依赖的各个模块的全局名称。
第二个参数:回调函数,当前模块加载成功后,该函数将被调用。加载模块会以参数的形式传入改函数。
4、模块的配置
require.config()方法,实现了对模块加载行为的自定义。require.config()定义在主模块的头部。
Eg:
require.config({
paths:{
"jquery":"juqery.min",
...
}
});
如果子模块在主模块的同级目录的子目录下,那写法为:
Eg:
require.config({
paths:{
"jquery":"lib/juqery.min",
...
}
});
或
require.config({
baseUrl:"js/lib",
paths:{
"jquery":"lib/juqery.min",
...
}
});
require.js要求,每个模块是一个单独的js文件。如果加载多个模块时,此时需要发出多次http请求,那么加载速度方面就会大大折扣。
require.js提供了一个优化工具,当模块部署完毕后,可以用这个工具将多个模块合并在一个文件中。
5、AMD模块写法
require.js加载的模块,采用AMD规范。
定义模块,需要采用特定的define()函数来定义,以test.js为例。
定义不依赖其它模块的写法:
define(function(){
var fn1=function(obj){
return obj;
};
return{
op:fn1
};
});
定义依赖其它模块的写法:
define(['mytest'],function(mytest){
function test(){
//...
}
return {
ta:test
};
});
主模块或者别的模块调用的写法:
require(['test'],function(test){
//...
});
6、非AMD规范模块写法
理论上,require.js加载模块,必须按照AMD规范、必须用define()函数定义模块。
例如:JQuery等。,现实环境中,也会出现非AMD规范的模块,require.js也实现了对非AMD规范的模块的兼容。
实现对非AMD模块的兼容,需要用require.config()进行配置,定义他们的特征。
Eg:
jQuery插件可以这样定义:
require.config({
shim:{
'jQuery.scroll':{
deps:['jQuery'],
exports:'jQuery.fn.scroll'
}
}
});
deps,模块的依赖。
exports,输出的变量名,别的模块调用这个模块时的名称。
7、require.js插件
require.js还提供了一些插件。
json和mdown插件。
domready插件,可以让回调函数在也页面DOM结构加载完成后再运行。
Eg:
require(['domready!'],function(doc){
//...
});
text和image插件,允许require.js加载文本和图片文件。
define(
['text!review.txt','image!cat.jpg'],
function(review,cat){
console.log(review);
document.body.appendChild(cat);
}
);
【上一章节】 【下一章节】
Javascript模块化编程-require.js[3]的更多相关文章
- 坑人的 Javascript 模块化编程 require.js
坑人的 Javascript 模块化编程 require.js
- Javascript模块化编程require.js的用法
JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...
- Javascript模块化编程 require.js使用详解
一.为什么用require.js,产生的背景 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载. & ...
- 坑人的 Javascript 模块化编程 sea.js
坑人的 Javascript 模块化编程 sea.js 忧伤 加 蛋疼的 开始了 看文档 Sea.js 进行配置 seajs.config({ // 设置路径,方便跨目录调用 paths: { 'ar ...
- Javascript模块化工具require.js教程
转自:http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html, http://www.w3cschool.cc/w3cnote/requir ...
- JavaScript模块化-require.js,r.js和打包发布
在JavaScript模块化和闭包和JavaScript-Module-Pattern-In-Depth这两篇文章中,提到了模块化的基本思想,但是在实际项目中模块化和项目人员的分工,组建化开发,打包发 ...
- Javascript模块化编程(三):require.js的用法
Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...
- Javascript模块化编程之路——(require.js)
转自:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成&q ...
- (转)Javascript模块化编程(三):Require.js的用法
转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...
随机推荐
- MyBatis一级缓存(转载)
<深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 http://demo.netfoucs.com/luanlouis/article/details/41 ...
- 记录一次(xheditor-1.1.6-zh-cn.min.js)的错误:Cannot read property 'match' of undefined的问题解决
由于使用了xheditor富文本框,且这个版本是2011年开发的系统,当时只有IE8,所以一切正常. 但是问题来了,今天使用IE11测试和谷歌浏览器测试,发现一直报这个错误: 且google了一下,没 ...
- static再次深入理解
在java中,栈中存放的是用来保存方法运行时状态的栈帧,存储了局部变量表,操作数栈等,而方法区存放的是已加载的类的基本信息.常量.静态变量等.
- VS2010 MFC中 在FormView派生类里获取文档类指针的方法
经过苦苦调试,今晚终于解决了一个大问题. 我想要实现的是:在一个FormView的派生类里获取到文档类的指针. 但是出现问题:试了很多办法,始终无法获取到. 终于,此问题在我不懈地调试加尝试下解决了. ...
- EasyMvc入门教程-基本控件说明(10)图片轮播导航
图片轮播导航大家一定很常见,尤其是中小型建站系统的必备神器..:) 先上图上例子,看效果如下: 实现代码如下: @{ var data = new List<PhotoPlayerItem> ...
- Java内存区域与模拟内存区域异常
我把Java的内存区域画了一张思维导图,以及各区域的主要功能. 模拟Java堆溢出 Java堆用于存储对象实例.仅仅要不断地创建对象而且保证GC ROOTS到对象之间有可达路径避免被回收机制清除.就能 ...
- Android性能优化Google课程翻译一:Render----OverDraw实战
Context 近期实战了下OverDraw,加深了下理解.在上篇文章里Android性能优化Google课程翻译一:Render----OverDraw 写过详细方法. OverDraw解决方法离不 ...
- Vue 响应式数据说明
值得注意的是只有当实例被创建时 data 中存在的属性才是响应式的.也就是说如果你添加一个新的属性,比如: vm.b = 'hi' 那么对 b 的改动将不会触发任何视图的更新. 这里唯一的例外是使用 ...
- 阿里巴巴天猫超市团队招聘java开发工程师
大家好,发个招聘信息:我是阿里巴巴集天猫超市开发团队的同学,我们部门目前在杭州招人,P6岗位,要求至少本科,熟悉java,spring等java开发技术,最好有互联网企业开发经验,感兴趣的可以通过我直 ...
- 分享一套C++入门基础视频
本课程从C++起步.用户无需不论什么计算机基础,仅仅须要懂的主要的电脑操作,既可学习本课程.本课程适合在校大学生,在职人员等,通过本课程的学习,学员可掌握C++\MFC\VC++server端.网络编 ...