requirejs简单理解


(转)RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一。最新版本的RequireJS压缩后只有14K,堪称非常轻量。它还同时可以和其他的框架协同工作,使用RequireJS必将使您的前端代码质量得以提升。

 

(补充:AMD规范:全称是Asynchronous Module Definition,即异步模块加载机制。AMD规范简单到只有一个API,即define函数。

        define([module-name?], [array-of-dependencies?], [module-factory-or-object]);

异步性。当define函数执行时,它首先会异步的去调用第二个参数中列出的依赖模块,当所有的模块被载入完成之后,如果第三个参数是一个回调函数则执行,然后告诉系统模块可用,也就通知了依赖于自己的模块自己已经可用。

异步和同步的区别显而易见,前者不会阻塞浏览器,有更好的性能和灵活性。而对于NodeJs这样的服务器端AMD,则模块载入无需阻塞服务器进程,同样提高了性能。)

 

使用requirejs好处:1、放置JS加载阻塞页面渲染。2、减少多行JS代码引入。

 

 

Require基本API:

 

require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短

 

  • define 定义一个模块
  • require 加载依赖模块,并执行加载完后的回调函数

 

简单使用:

HTML:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="require.js"></script>
        <script type="text/javascript">
            require(["a"]);
        </script>
    </head>
    <body>
      <span>body</span>
    </body>
</html>

 通过define函数定义了一个模块:

a.js:

define(function(){
    function fun1(){
      alert("it works");
    }
    fun1();
})

require用来加载该模块(注意require中的依赖是一个数组,即使只有一个依赖,你也必须使用数组来定义),requir API的第二个参数是callback,一个function,是用来处理加载完毕后的逻辑,如:

require(["js/a"],function(){
    alert("load finished");
})

(JS渲染阻塞:当不使用requirejs时,执行alert弹出框后不会HTML页面不会显示body,只有确定弹出框后才正常显示页面。这是JS渲染阻塞影响。)

 

加载文件

需要加载的JS可能来自本地服务器、其他网站或CDN:

require.config({
    paths : {
        "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"],
        "a" : "js/a"   
    }
})
require(["jquery","a"],function($){
    $(function(){
        alert("load finished");  
    })
})

 

通过paths的配置会使我们的模块名字更精炼,paths还有一个重要的功能,就是可以配置多个路径,如果远程cdn库没有加载成功,可以加载本地的库,如:(这样配置后,当百度的jquery没有加载成功后,会加载本地js目录下的jquery)

require.config({
    paths : {
        "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "js/jquery"],
        "a" : "js/a"   
    }
})
require(["jquery","a"],function($){
    $(function(){
        alert("load finished");  
    })
})
  1. 在使用requirejs时,加载模块时不用写.js后缀的,当然也是不能写后缀
  2. 上面例子中的callback函数中发现有$参数,这个就是依赖的jquery模块的输出变量,如果你依赖多个模块,可以依次写入多个参数来使用:

 

require(["jquery","underscore"],function($, _){
    $(function(){
        _.each([1,2,3],alert);
    })
})

 

 

第三方模块

通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM