什么是require?

require是AMD模块化规范的具体实现。

目前,通行的js模块化规范有两种,CommonJS和AMD。

CommonJS和AMD有什么不同呢?

CommonJS主要用于服务端,它的特点是同步加载,在某个模块加载完成后才会加载下一模块,这在服务端没什么问题,读取速度就是硬盘的读写速度,但在浏览器中环境下,加载的模块都存储在服务器上,所以加载时间取决于客户端网速,如果网速不过关可能某个模块需要加载很长时间,那之后的模块则不会加载,这会让浏览器在一段时间内处于假死状态,这显然是不合适的。

因此,适用于浏览器的模块化不能使用同步加载,只能用异步加载。

于是AMD应运而生,AMD(Asynchronous Module Definition)的意思就是异步加载,解释下同步异步。

同步异步是一种被请求者的消息通知机制

  • 同步:被请求者处理请求者请求的事,但不会通知请求者处理结果,需要请求者轮询,或者监听被请求者。
  • 异步:被请求者处理请求者请求的事,当处理结果时,通知请求者处理结果。
  • 阻塞:阻塞当前进程,当前进程不完成,不处理下一个进程。
  • 非阻塞:在当前进程处理过程中,不急于得到结果,继续处理下一个进程。

AMD是异步加载,所有依赖加载模块的语句都放在一个回调函数中,当加载完成后执行。

使用requireJS

requireJS是AMD规范的实现,是客户端实现模块化的工具。AMD之与requireJS就像ECMAscript之与javascript,一个是规范,一个是规范的具体实现。

下载requireJS,放在项目js目录下,即可加载,为避免加载时网页失去响应,建议在网页底部加载,或者写成:

<script src="js/require.js" defer async="true" ></script>

async代表要异步加载,避免网页失去响应,ie不支持这个属性,值支持defer。

加载requireJS之后需要加载自己的js文件,一般用一个js文件作为模块化的入口文件,其他引入在入口文件中完成。

<script src="js/require.js" data-main="js/main"></script>  // mian.js即为入口文件,因为默认加载js文件可省略js后缀。

data-main 属性为指定加载主模块,上述加载中主模块为main.js,该文件会第一个被加载。

如果在mian中不依赖其他模块可以直接写js程序,如果需要引用其他模块则必须使用requireJS指定的引用方式。

requireJS用require函数加载模块,它接受两个参数,第一个参数为一个数组,指定要加载的模块,第二个参数为一个回调函数,在所有模块加载完成后执行

require(["module"],callback(module){
//do something……
})

如果我们有很多js目录,存放不同功能的js 文件,那我们可以用require.config方法来配置模块的加载行为,在文件顶部进行配置。

require.config={
paths:{
"module1":"module1",
"module2":"module2",
"module1":"module3",
}
}

使用requireJS的更多相关文章

  1. bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序

    也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...

  2. 实现一个类 RequireJS 的模块加载器 (二)

    2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...

  3. 使用RequireJS并实现一个自己的模块加载器 (一)

    RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...

  4. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

  5. AngularJs2与AMD加载器(dojo requirejs)集成

    现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...

  6. angularjs集成requirejs

    其实说成使用requirejs加载angularjs应用会更贴切一些 <body> <span ng-controller="homeController"> ...

  7. 使用gulp解决RequireJS项目前端缓存问题(一)

    1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...

  8. CommonJS, AMD 和 RequireJS之间的关系(转载)

    先说说CommonJS CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScript设计之初不仅仅是针对客户端设计的语言.后来只是由于Web的迅速流行, ...

  9. RequireJS与SeaJS模块化加载示例

    web应用越变的庞大,模块化越显得重要,尤其Nodejs的流行,Javascript不限用于浏览器,还用于后台或其他场景时,没有Class,没有 Package的Javascript语言变得难以管理, ...

  10. 【requireJS源码学习01】了解整个requireJS的结构

    前言 现在工作中基本离不开requireJS这种模块管理工具了,之前一直在用,但是对其原理不甚熟悉,整两天我们来试着学习其源码,而后在探寻其背后的AMD思想吧 于是今天的目标是熟悉requireJS整 ...

随机推荐

  1. Python实现简易Web服务器

     1.请自行了解HTTP协议 http://www.cnblogs.com/reboot51/p/8358129.html(点击跳转) 2.创建Socket服务,监听指定IP和端口 3.以阻塞方式等待 ...

  2. java—— finall 关键词

    _ *{ margin: 0; padding: 0; } .on2{ margin: 10px 0; cursor: pointer; user-select: none; color: white ...

  3. python_判断变量类型

    需求: 已知有一个变量,我想对他进行预处理判断,如果这个变量是字符串,则在字符串后面加上后缀'_str',如果整形就让其加5,还比如我要求这个变量是整形或者字符串,都行 如何做? #!/usr/bin ...

  4. python_为被装饰的函数保留元数据

    案例: 在函数对象中保存着一些函数的元数据,如: f.__name__           函数名 f.__doc__              函数文档 f.__moudle__       函数所 ...

  5. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  6. Win2003 设置远程连接限制数

    在开发过程中,很多同事需要连接到一台Win2003服务器,但是连接人数超过了10个,就连接不上了.想设置一下连接限制数,可以如下操作: 1:在运行里面输入gpedit.msc后,弹出"本地计 ...

  7. NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤

    本文使用:Unity3d + opencv + Android Unity3d中可以调用opencv 编译好的.so 动态库,在生成Android apk时可以正常运行.   因为Android系统是 ...

  8. java判断时间大小

    //构造日期格式yyyy-MM-NN SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date d ...

  9. thinkphp5学习(一)——thinkphp5的目录结构与开发规范

    开发规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致: 类文件采用驼峰法命名(首字母大写),其它文 ...

  10. IE下常见的js兼容问题

    1.IE下不支持console.log() 2.IE下不支持addEventListener() 解决办法:用IE相应的attachEvent() 3.IE下请求后台接口会有缓存 解决方案,接口加版本 ...