一、为什么要用require.js?

最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。

  <script src="1.js"></script>
  <script src="2.js"></script>
  <script src="3.js"></script>
  <script src="4.js"></script>
  <script src="5.js"></script>
  <script src="6.js"></script>

这段代码依次加载多个js文件。

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

require.js的诞生,就是为了解决这两个问题:

  

  (1)实现js文件的异步加载,避免网页失去响应;

  (2)管理模块之间的依赖性,便于代码的编写和维护。

二、require.js的加载(index.html或是product.html中的代码)

使用require.js的第一步,是先去官方网站下载最新版本。

下载后,假定把它放在js子目录下面,就可以加载了。

  <script src="js/require.js"></script>

有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:

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

async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

加载require.js以后,下一步就要加载我们自己的代码了。假定我们自己的代码文件是main.js,也放在js目录下面。那么,只需要写成下面这样就行了:

  <script src="js/require.js" data-main="js/main"></script>

data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。

三、模块的加载(main.js文件中的代码)

一种则是直接配置目录(baseUrl 要求所有的js文件都放在同一个文件夹目录下,如这里都放在js文件下)。

  require.config({

    baseUrl: "js",

<!-- baseUrl,它的作用就是,以它作为基础路径,在这个路径之下,查找文件。我是将所有.js文件都放在js文件夹下的。
                           所以,在require([])或者define([])的依赖数组列表中,写上依赖的文件路径:如require(['jquery','lunbo','car'],function($,l,c){ })

-->

          });

require(['jquery', 'car', 'lunbo',/*依赖的文件路径*/], function ($, car, l,/*依赖模块返回的对象或数组*/){

             // some code here

//调用依赖模块中的属性或方法

   })

二种则是配置路径(paths 路径可以是绝对路径,相对路径,或是远程路径,不要求js文件都放同一个文件夹里面)

  require.config({

   

  paths: {

<!-- paths的作用呢?就是将一些常用的js文件,换成通用的名字。
例如jquery-1.8.2.min.js,我们不可能每次调用它时,都写这一啪啦吧,
所以为了方便,就将jquery替代jquery-1.8.2.min.js咯(给路径起别名),以后我们就可以直接使用jquery(别名)了,快捷方便。 -->

      "jquery": ["jquery","https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"],

"car":"car",

"lunbo":"lunbo",

"erro":"erro",

"glass":"../放大镜",

"preloading":"../图片预加载"

      

    }

  });

require(['jquery', 'glass', 'lunbo','preloading'/*依赖的文件别名*/], function ($, gla, l,prelo/*依赖模块返回的对象或数组*/){

             // some code here

//调用依赖模块中的属性或方法

   })

三种则是一二两种的结合

require.config({

baseUrl:'js',

paths:{

"glass":"../放大镜",

"preloading":"../图片预加载"

}

})

require(['jquery','car','lunbo','glass','preloading'],function($,car,l,gla,prelo){//回调函数中的参数一 一对应依赖模块返回的对象或函数

l.move();//lunbo.js模块返回的是对象

car();//car.js模块返回的是函数

})

五、标准模块的定义(define())  
1 :模块必须采用特定的define()函数来定义

如:lunbo.js文件中的代码

define(['jquery'],function($){

return{
         "move":function(){
                      $("#a").html("lunbo中执行的代码");
                   

              }

}

})

如:car.js文件中的代码

define(['jquery','lunbo'],function($,l){

return  function  shoping(){

console.log("car中执行的代码")

l.move()//lunbo.js模块返回的是对象

}

})

<!--
define!它的作用是,定义一个js模块,供其他模块或者require使用。
它引用其他js的模块的方法和require差不多,都是将需要的js文件引入,然后参数一一对应。
大家需要要注意的是,define里定义的方法或者变量,其他模块是访问不到的,
所以,你如果想其他模块也能访问,就应该返回(return)对象或者函数都可以。
在这里,我return的是一个对象,提供init供其他模块调用。
-->

六 非标准化的模块(erro.js中的代码)

定义的模块不使用define()函数定义的  都是非标准模块

如:function sucess(){

console.log("非标准模块中执行的代码")

}

//非标准模块中定义的函数 ,由于没有以函数或是对象的形式返回,所以在其他的模块中无法访问

//如果想访问非标准模块中的函数 就必须在require.config()中进行配置

如:   require.config({

baseUrl:'js',

paths:{

'glass':"../放大镜",

"preloading":"../图片与加载"

},

shim{

"erro":{//需要配置的模块名称

exports:'sucess'//非标准模块的函数名

}

}

})

require(['erro'],function(er){

er();//erro.js返回的是当个函数

})

定义的模块不使用define()函数定义的  都是非标准模块

如:function sucess(){

console.log("非标准模块中执行的代码1")

}

function madol(){

console.log("非标准模块中执行的代码2")

}

//非标准模块中定义的函数 ,由于没有以函数或是对象的形式返回,所以在其他的模块中无法访问

//如果想访问非标准模块中的函数 就必须在require.config()中进行配置

如:   require.config({

baseUrl:'js',

paths:{

'glass':"../放大镜",

"preloading":"../图片与加载"

},

shim{

"erro":{//需要配置的模块名称

init:function(){

return {             //配置多个非标准模块的函数名

su:sucess,//注意此时的函数名不用引号

mo:madol

}

}

}

}

})

require(['erro'],function(er){

er.su();//erro.js返回的是对象

er.mo();

})

require.js按需加载使用简介的更多相关文章

  1. webpack require.ensure 按需加载

    使用 vue-cli构建的项目,在 默认情况下 ,会将所有的js代码打包为一个整体比如index.js.当使用存在多个路由代码的时候,index.js可能会超大,影响加载速度. 这个每个路由页面除了i ...

  2. require.js模块化管理和加载js(按需加载)简单实例教学

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

  3. 按需加载.js .css文件

    首先,理解按需加载当你需要用到某个js里面的函数什么鬼,或者某个css里的样式的时候你才开始加载这个文件. 然后是怎样实现的,简单来说就是在js中动态的createElem<script> ...

  4. jQuery中的ready方法及实现按需加载css,js

    模拟jQuery中的ready方法及实现按需加载css,js 一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的 ...

  5. 模拟jQuery中的ready方法及实现按需加载css,js

    一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的源码,涉及到的模块比较多,(水平有限)代码比较难看懂:自己结合 ...

  6. 模拟jQuery中的ready方法及实现按需加载css,js实例代码

    这篇文章介绍了模拟jQuery中的ready方法及实现按需加载css,js实例代码,有需要的朋友可以参考一下     一.ready函数的实现经常用jQuery类库或其他类库中的ready方法,有时候 ...

  7. 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)

    1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...

  8. Webpack按需加载一切皆模块

    前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...

  9. webpack中利用require.ensure()实现按需加载

    webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...

随机推荐

  1. Algorithm --> 爬楼梯求最大分数

    爬楼梯求最大分数 如下图,最大分数是: 10+20+25+20=75.        要求: 1.每次只能走一步或者两步: 2.不能连续三步走一样的,即最多连续走两次一步,或者连续走两次两步: 3.必 ...

  2. [bzoj1355][Baltic2009]Radio Transmission_KMP

    Radio Transmissio bzoj-1355 Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Inp ...

  3. 关于Netty的入门使用

    Netty介绍: Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比 ...

  4. Linux进程间通信-消息队列(mqueue)

    前面两篇文章分解介绍了匿名管道和命名管道方式的进程间通信,本文将介绍Linux消息队列(posix)的通信机制和特点. 1.消息队列 消息队列的实现分为两种,一种为System V的消息队列,一种是P ...

  5. beta冲刺4

    昨天的问题: 我的社团数据库表项的处理,代码修改后结果无法显示. 帖子内容无法显示出来. 首页图像未替换 登陆整合没有完成 今天的完成: 服务器部署成功 页面背景修改.(已上传,未确认实装.) 任务截 ...

  6. 凡事预则立-于Beta冲刺前

    凡事预则立,在Beta开始前的描述 在Beta项目冲刺开始之前,我们小组组织了一次活动室的讨论,明确了一下分工和即将来临的Beta冲刺要处理的问题和需要继续改进的地方.顺带补上一直没有的照片: 针对几 ...

  7. c语言——第0次作业

    1.你认为大学的学习生活.同学关系.师生应该是怎样?请一个个展开描写 大学生活:大学生活充满着挑战,首先当然必须先掌握自己所学的专业知识,然后就要学会独立,可以处理好人际关系,并且要有更强的自我约束能 ...

  8. C语言第一次作业——输入输出格式

    题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...

  9. 转:运行page页面时的事件执行顺序及页面的回发与否深度了解

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  10. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...