require.js模块化js,r.js压缩js为为一个文件优化请求

传统的js加载在处理依赖时,需要在js文件前面加载依赖的js文件
这样的写法有很大的缺点。首先,加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序,依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。
使用require.js可以做到


(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。


1.如何定义模块
a.js
define(['config','zepto.min','drawprocess'] //这里是依赖的模块ID,模块不加ID的时候默认为文件名 ,function(appSetting,Zepto){

function a(){
//dosomething
}
return {
funcname:funcname    //将方法暴露给其他模块 
}
})


在另一个模块中加载依赖后调用
a.funcname
2.main.js://main.js是requirejs加载的入口,只有俩个方法
使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。
require.config({
paths: {




},
baseUrl:'/js',
shim:{
'mobiscroll.custom-2.16.0.min': {
       deps: ['zepto.min'] //表明该模块的依赖性 
export:'name'//模块外部调用时的名称
     }
}
});

require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,上例就是['moduleA', 'moduleB', 'moduleC'],即主模块依赖这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。


require(['getListEndData','zepto'],function(list_end,Zepto){
list_end.initializeListEnd(Zepto.Zepto);//需要加载的模块和需要使用的方法
});
3.require.js要求,每个模块是一个单独的js文件。这样的话,如果加载多个模块,就会发出多次HTTP请求,会影响网页的加载速度。因此,require.js提供了一个优化工具,当模块部署完毕以后,可以用这个工具将多个模块合并在一个文件中,减少HTTP请求数。r.js 将文件压缩为一个js文件,r.js会检测代码是否有错误。
r.js需要安装nodejs
安装以后
使用node 命令
node r.js -o baseUrl=./js name=main out=main-built.js
main.js在./js下 输出main-built.js
页面代码修改为
<script src="require.js" data-main="main-built.js"></script>
network中就只加载一个js了
 
 再次查看network 
 








你可能感兴趣的:(JavaScript,压缩,优化,异步,模块化)