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