欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RequireJs的使用詳解

 更新時間:2017年02月19日 08:40:42   作者:開發(fā)之路  
本文主要介紹了RequireJs的使用。具有很好的參考價值,下面跟著小編一起來看下吧

一、為什么使用RequireJS?

  <script src="a.js"></script>
  <script src="b.js"></script>
  <script src="c.js"></script>

上述多個js文件加載的時候,瀏覽器會停止網(wǎng)頁渲染(JS阻塞瀏覽器渲染),加載文件越多,網(wǎng)頁失去響應(yīng)的時間就會越長;另外各文件的依賴關(guān)系很難管理。

RequireJs的作用:

(1)實現(xiàn)js文件的異步加載,避免網(wǎng)頁失去響應(yīng);

(2)管理模塊之間的依賴性,便于代碼的編寫和維護(hù)。

(3)定義了一個作用域來避免全局名稱空間污染。

二、require.js的加載

1.從官網(wǎng)下載最新版本的require,放在js目錄下,使用script引入頁面:

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

為了不阻塞頁面渲染,可以把它放在HTML的最底部或改為如下方式:

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

async屬性表明該文件需異步加載(defer屬性兼容IE)。

2.加載頁面邏輯代碼:

假定代碼文件是main.js,也放在js目錄下,則用如下幾種方式引入:

方式1:

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

data-main屬性指定網(wǎng)頁程序的主入口,這個文件會第一個被requirejs加載。requirejs默認(rèn)所依賴的資源都是js,所以可以把main.js簡寫成main。

方式2:

在加載require.js后,通過requirejs加載config配置文件(如有),最后加載主模塊:

require([‘configUrl'],function () { //config.js必須通過requirejs加載才能注冊
 require([moduleAName],function(moduelA){
 //邏輯代碼
 })
});

三、主模塊的寫法

// main.js
  require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
    // some code here
  });

require()函數(shù)接受兩個參數(shù),第一個參數(shù)是一個數(shù)組,表示當(dāng)前模塊所依賴的模塊;第二個參數(shù)是一個回調(diào)函數(shù),當(dāng)前面指定的模塊都加載成功后,它將被調(diào)用。加載的模塊會以參數(shù)形式傳入該回調(diào)函數(shù),從而在回調(diào)函數(shù)內(nèi)部就可以使用這些模塊(被依賴的模塊有return的值)。

require()異步加載moduleA,moduleB和moduleC,瀏覽器不會失去響應(yīng);它指定的回調(diào)函數(shù),只有當(dāng)前面依賴的模塊全部下載并執(zhí)行對應(yīng)的回調(diào)之后,才會運行。

四、模塊的配置

require.config()方法可以定義模塊的路徑,并以短模塊名的形式進(jìn)行依賴的定義。該方法可以寫在每個主模塊(main.js)的前面,配合主模塊一起使用。

參數(shù)是一個對象,這個對象的paths屬性指定各個模塊的加載路徑。paths可以配置多個路徑,如果遠(yuǎn)程cdn庫沒有加載成功,則加載本地的庫。

如果不定義模塊的配置,則在主模塊中的依賴需要寫完整路徑。

在每個頁面按需配置路徑:

require.config({  //注冊模塊的配置,供后面的代碼使用
    baseUrl: '/js/', 
 paths: {
   "jquery":”cdnUrl”, "Jquery/jquery-1.12.0.min"
  "fixheight": "login/fixheight"
 }
 });
 require(['jquery', 'fixheight'], function ($, fixHeight) {
 ...other code; 
 fixHeight.init();
});

或者將config配置作為一個單獨的js文件,然后

require([“configJsUrl”],function(){  //需要在main文件中通過require先異步加載模塊配置
 require([‘ModuleName'],function(Name){
 …other code
 })
})

為了避免每個頁面都要嵌套require,還可以用如下方式:

先創(chuàng)建單獨的config.js文件:

require.config({ //注冊模塊的配置,供后面的代碼使用
 baseUrl: "/js/app/", //其他依賴都是對于此位置的相對路徑
 // 路徑配置
 paths: {
underscore: 'vender/underscore.min',   backbone:'vender/backbone.min'
 jquery: ‘cdnUrl','vender/jquery/jquery-1.12.0.min',
 “模塊短名”:”相對于baseUrl的路徑地址,省略模塊文件的后綴.js”
 },
 // 非AMD模式編寫的類庫需要重新配置
 shim: {
 underscore: {
  exports:'_'
 },
 backbone(短模塊名仍需要定義路徑): {
  exports: 'Backbone',      //類庫輸出的變量名,表明這個模塊被外部調(diào)用時的名稱
  deps:['jquery','underscore'] //該模塊的依賴
 }
 },
 urlArgs: "bust=" + document.getElementById('publishDate').attributes['value'].value  //js資源的參數(shù),控制版本刷新緩存
});
define([ 'marionette'], function () { }); //仍是會被執(zhí)行的js代碼,會依次加載需要的模塊

然后通過如下方式使用:

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

通過主入口直接將模塊配置注冊到requirejs命名空間中,頁面中后續(xù)的require方法無需再注冊,可以直接使用短模塊名進(jìn)行依賴加載。

如果沒有顯式指定config及data-main,則默認(rèn)的baseUrl為加載RequireJS的HTML頁面所在目錄。如果指定了data-main而沒有在config中指定根路徑,則該路徑被設(shè)為baseUrl。

若想避開"baseUrl + paths"的解析過程,而是直接指定加載某一個目錄下的腳本??梢赃@樣做:如果一個module ID符合下述規(guī)則之一,其ID解析會避開常規(guī)的"baseUrl + paths"配置,而是直接將其加載為一個相對于當(dāng)前HTML文檔路徑的腳本:

•    以 ".js" 結(jié)束.

•    以 "/" 開始.

•    包含 URL 協(xié)議, 如 "http:" or "https:".

eg. require(['/www/js/app/vender/underscore.min.js'], function (_) {…})

require.js要求,每個模塊是一個單獨的js文件。加載多個模塊就會發(fā)出多次HTTP請求,影響網(wǎng)頁的加載速度。因此require.js提供了一個優(yōu)化工具(r.js),當(dāng)模塊部署完畢以后,可以用這個工具將多個模塊合并在一個文件中,減少HTTP請求數(shù),但又需要和緩存之間進(jìn)行取舍。

六、AMD模塊的寫法

require.js加載的模塊,必須按照AMD的規(guī)定來寫。即模塊必須采用特定的define()函數(shù)來定義,通常返回一個對象,該對象具有供別的模塊使用的方法或?qū)傩?;或只?zhí)行相關(guān)邏輯而無輸出。

七、require.js的相關(guān)插件

text插件,允許require.js異步加載txt、css或html等文本資源供js使用,而不需要在script內(nèi)構(gòu)建Html字符串。

define(['text!components/multiple/template.html', 'image!cat.jpg'],
 function(template,cat){
 $('body').append($(template));
 document.body.appendChild(cat);
 }
); 

注意:

模塊的依賴既可以通過[]引入,也可以在回調(diào)函數(shù)里通過require()方法引入,效果一樣。因為define方法會通過正則先掃描回調(diào)函數(shù)中require方法的依賴并下載,然后才執(zhí)行該回調(diào)函數(shù)。但此時需要傳入依賴require本身,否則會報錯:

define(function(require){
 var helper=require(‘helpModuleUrI');//也會提前加載該依賴
 …
})

多個模塊先后多次依賴同一個模塊時,該模塊只會被下載并初始化一次,之后require會保持對其的引用供別的模塊再次使用。

區(qū)分require方法的執(zhí)行和回調(diào)的執(zhí)行:

require('config',callBack1);
require('b',callBack2);
// 兩個require方法會立即執(zhí)行,但callBack的執(zhí)行順序不確定,取決于下載的順序。
//不同于以下代碼,會嚴(yán)格按順序執(zhí)行
require('config',function(){
 require('b',callBack2)
})

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Angular-Touch庫用法示例

    Angular-Touch庫用法示例

    這篇文章主要介紹了Angular-Touch庫用法,結(jié)合觸屏滑動事件的實現(xiàn)為例分析了Angular-Touch庫的相關(guān)使用技巧,需要的朋友可以參考下
    2016-12-12
  • AngularJS 實現(xiàn)按需異步加載實例代碼

    AngularJS 實現(xiàn)按需異步加載實例代碼

    這篇文章主要介紹了AngularJS 實現(xiàn)按需異步加載實例代碼的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • AngularJs中route的使用方法和配置

    AngularJs中route的使用方法和配置

    angular是Google開發(fā)的一個單頁面應(yīng)用框架,是現(xiàn)在比較主流的單頁面應(yīng)用框架之一,下面通過本文給大家介紹AngularJs中route的使用方法和配置,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • angularjs2中父子組件的數(shù)據(jù)傳遞的實例代碼

    angularjs2中父子組件的數(shù)據(jù)傳遞的實例代碼

    本篇文章主要介紹了angularjs2中父子組件的數(shù)據(jù)傳遞的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Angular2使用SVG自定義圖表(條形圖、折線圖)組件示例

    Angular2使用SVG自定義圖表(條形圖、折線圖)組件示例

    這篇文章主要介紹了Angular2使用SVG自定義圖表(條形圖、折線圖)組件,涉及Angular結(jié)合svg進(jìn)行圖表繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • 在 Angular 中使用懶加載路由的方法

    在 Angular 中使用懶加載路由的方法

    延遲加載是一種限制加載用戶當(dāng)前需要的模塊的方法,這可以提高應(yīng)用程序的性能并減小初始捆綁包大小,在本文中,您學(xué)習(xí)了如何在 Angular 應(yīng)用程序中使用惰性加載路由,本文分步驟講解的非常詳細(xì),感興趣的朋友一起看看吧
    2024-02-02
  • Angularjs自定義指令實現(xiàn)三級聯(lián)動 選擇地理位置

    Angularjs自定義指令實現(xiàn)三級聯(lián)動 選擇地理位置

    這篇文章主要介紹了Angularjs自定義指令實現(xiàn)三級聯(lián)動,選擇地理位置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Bootstrap與Angularjs的模態(tài)框?qū)嵗a

    Bootstrap與Angularjs的模態(tài)框?qū)嵗a

    這篇文章主要介紹了Bootstrap與Angularjs的模態(tài)框?qū)嵗a,需要的朋友可以參考下
    2017-08-08
  • 淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定

    淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定

    這篇文章主要介紹了淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解AngularJS 模塊化

    詳解AngularJS 模塊化

    本篇文章主要介紹了詳解AngularJS 模塊化,模塊用于單獨的邏輯表示服務(wù),控制器,應(yīng)用程序等,并保持代碼的整潔。有興趣的可以了解一下
    2017-06-06

最新評論