很多情况下,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]的更多相关文章

  1. 坑人的 Javascript 模块化编程 require.js

    坑人的 Javascript 模块化编程 require.js

  2. Javascript模块化编程require.js的用法

    JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...

  3. Javascript模块化编程 require.js使用详解

    一.为什么用require.js,产生的背景 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载. & ...

  4. 坑人的 Javascript 模块化编程 sea.js

    坑人的 Javascript 模块化编程 sea.js 忧伤 加 蛋疼的 开始了 看文档 Sea.js 进行配置 seajs.config({ // 设置路径,方便跨目录调用 paths: { 'ar ...

  5. Javascript模块化工具require.js教程

    转自:http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html, http://www.w3cschool.cc/w3cnote/requir ...

  6. JavaScript模块化-require.js,r.js和打包发布

    在JavaScript模块化和闭包和JavaScript-Module-Pattern-In-Depth这两篇文章中,提到了模块化的基本思想,但是在实际项目中模块化和项目人员的分工,组建化开发,打包发 ...

  7. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  8. Javascript模块化编程之路——(require.js)

    转自:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成&q ...

  9. (转)Javascript模块化编程(三):Require.js的用法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

随机推荐

  1. Linux笔记:vim

    文件搜索后显示高亮,即使退出编辑高亮依然存在.使用以下几个方法: 1)指令模式下运行:nohlsearch 2)运行set nohlsearc,可永久关闭搜索高亮 3)搜索任意不存在的字符串

  2. BZOJ—— 3402: [Usaco2009 Open]Hide and Seek 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3402 Description     贝茜在和约翰玩一个“捉迷藏”的游戏.     她正要找出所有适 ...

  3. jvm 简单描述

    java零基础入门-面向对象篇(一) 基础类型和引用类型 友情提示:本章开始可能会有部分较深入的内容,不说又不行,说了又很难解释清楚,因为里面的技术细节实在太多太复杂,所以我会屏蔽部分技术细节,只展示 ...

  4. Android与javaScript的交互

    WebView与js的交互包含两方面,一是在html中通过js调用java代码:二是在安卓java代码中调用js. 一.html中通过js调用java代码 js中调用java代码其实就记住一点,Web ...

  5. Ubuntu免安装配置MySQL

    1.下载mysql http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz 2.解压 ta ...

  6. openssl之EVP系列之12---EVP_Seal系列函数介绍

    openssl之EVP系列之12---EVP_Seal系列函数介绍     ---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成     (作者:Dra ...

  7. 传输层:UDP 协议

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此, ...

  8. 【京东账户】——Mysql/PHP/Ajax爬坑之购物车删除选项

    一.引言 做京东账户项目中的购物车模块,功能之三就是删除购物车中的选项.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:购物车表  jd ...

  9. API测试工具postman使用总结

    一.Postman介绍: Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件,主要用于模拟网络请求包,快速创建请求,回放.管理请求,验 ...

  10. spring boot 读取配置文件(application.yml)中的属性值

    在spring boot中,简单几步,读取配置文件(application.yml)中各种不同类型的属性值: 1.引入依赖: <!-- 支持 @ConfigurationProperties 注 ...