真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Require.js有什么用

小編給大家分享一下Require.js有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

綿陽(yáng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),綿陽(yáng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為綿陽(yáng)上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的綿陽(yáng)做網(wǎng)站的公司定做!

一:什么是require.js

①:require.js是一個(gè)js腳本加載器,它遵循AMD(Asynchronous Module Definition)規(guī)范,實(shí)現(xiàn)js腳本的異步加載,不阻塞頁(yè)面的渲染和其后的腳本的執(zhí)行,并提供了在加載完成之后的執(zhí)行相應(yīng)回調(diào)函數(shù)的功能;

②:require.js要求js腳本必須要實(shí)現(xiàn)模塊化,即文件化;而require.js的作用之一就是加載js模塊,也就是js文件。

③:require.js可以管理js模塊/文件之間的依賴;即不同的框架例如Jquery,AngularJs等采用了不同的語(yǔ)法,而使用這些語(yǔ)法的js文件在導(dǎo)入時(shí)必須排在Jquery.js或Angular.js之后才能順利執(zhí)行,require.js則能夠解決排序依賴問(wèn)題。

二:為什么要使用require.js

①:加載的時(shí)候,瀏覽器會(huì)停止網(wǎng)頁(yè)渲染,原因如下:

在不使用require.js時(shí),文件編寫方式如下:



  
    
  
  
   Hellow World
  

 在導(dǎo)入的a.js文件中:

(function(){
  function fun1(){
   alert("JS文件已生效");
  }
  fun1();
})()

 在運(yùn)行以上代碼時(shí)我們可以注意到在alert彈出的提示框出現(xiàn)的時(shí)候,網(wǎng)頁(yè)html的部分仍然是空白的,沒有顯示出任何內(nèi)容,當(dāng)我們點(diǎn)擊確定之后"Hellow World"才會(huì)顯示在網(wǎng)頁(yè)中,這就是JS阻塞瀏覽器渲染導(dǎo)致的結(jié)果。加載文件越多,網(wǎng)頁(yè)失去響應(yīng)的時(shí)間就會(huì)越長(zhǎng)。

②:由于js文件之間存在依賴關(guān)系,因此必須嚴(yán)格保證加載順序,依賴性最大的模塊一定要放到最后加載,當(dāng)依賴關(guān)系很復(fù)雜的時(shí)候,代碼的編寫和維護(hù)都會(huì)變得困難。例如:



  
    
    
    
    
  
  
    
  

 在b.js文件中

$(function(){
  $("#div1").css("background-color","blue");
})

 為了使b.js中的代碼生效,必須要把這行代碼放到后面,這樣在使用的框架和js文件較多的時(shí)候,它們的導(dǎo)入順序就會(huì)變得很麻煩。

require.js的誕生就是為了解決上面所說(shuō)的兩個(gè)問(wèn)題:

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

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

三:require.js的加載

①:首先,我們要去官網(wǎng)下載最新的版本,官方網(wǎng)址:http://requirejs.org/docs/download.html

下載完成后,將它放在網(wǎng)站項(xiàng)目的js子文件夾下就可以使用了:

這里可能會(huì)遇到一個(gè)問(wèn)題:加載這個(gè)文件,也可能造成網(wǎng)頁(yè)失去響應(yīng),這個(gè)問(wèn)題的解決辦法有兩種:

1.將這行代碼寫成如下格式:

其中:async屬性和defer屬性表明這個(gè)文件需要異步加載,避免網(wǎng)頁(yè)失去響應(yīng)。IE只支持defer屬性,而不支持async屬性。

2.將文件放到網(wǎng)頁(yè)底部加載。

②:加載完require.js之后,我們就可以加載自己的代碼了,假設(shè)我們自己的js文件命名為main.js,同樣放于js文件夾下,那么,只需要執(zhí)行如下代碼:

上述代碼中,data-main屬性的作用是指定網(wǎng)頁(yè)程序的主模塊。即js目錄下面的main.js,這個(gè)文件會(huì)第一個(gè)被require.js加載。由于require.js默認(rèn)的文件后綴名是js,所以可以省略掉".js"簡(jiǎn)寫成main。

四:基本API

在上一部分中,我們引入了main.js文件,main.js的寫法:

define(function(){
  function fun1(){
   alert("main.js已生效");
  }
  fun1();
})

這樣,我們就通過(guò)define函數(shù)定義了一個(gè)模塊,然后在頁(yè)面中通過(guò)AMD規(guī)范定義的的require()函數(shù)使用:

require(["js/main"]);

一般情況下,它會(huì)依賴于其他的js框架,比如jquery等等,那么,我們這時(shí)就要在頁(yè)面文件中。我們需要按照以下格式來(lái)寫:

require(['A', 'B', 'C'], function (A, B, C){
  // js代碼
});

require()函數(shù)接受兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)數(shù)組,表示所依賴的框架,上例就是['A', 'B', 'C'],即main.js里的代碼需要用到這三個(gè)模塊;第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),當(dāng)前面指定的模塊都加載成功后,它將被調(diào)用。加載的模塊會(huì)以參數(shù)形式傳入該函數(shù),從而在回調(diào)函數(shù)內(nèi)部就可以使用這些模塊。

require()會(huì)異步加載A,B,C三個(gè)模塊,瀏覽器不會(huì)失去響應(yīng);它指定的回調(diào)函數(shù),只有前面的模塊都加載成功后,才會(huì)運(yùn)行,解決了依賴性的問(wèn)題。

下面。我們就以jquery為例,說(shuō)明這個(gè)函數(shù)是怎樣運(yùn)行的:

require(['jquery'], function ($){
  // jquery代碼
});

require.js會(huì)先加載jQuery,然后再運(yùn)行回調(diào)函數(shù)。main.js的代碼就寫在回調(diào)函數(shù)中。注意:require中的依賴是一個(gè)數(shù)組,即使只有一個(gè)依賴,你也必須使用數(shù)組來(lái)定義。

五:加載文件

在上一部分中,main.js的依賴模塊是['jquery']。默認(rèn)情況下,require.js會(huì)假定這個(gè)模塊與main.js在同一個(gè)目錄,文件名是 jquery.js,然后自動(dòng)加載,除此之外,我們可以通過(guò)require.config()方法,我們可以對(duì)模塊的加載行為進(jìn)行自定義,require.config()就寫在main.js的頭部,它的參數(shù)是一個(gè)對(duì)象,這個(gè)對(duì)象的paths屬性指定各個(gè)模塊的加載路徑。

require.config({
    paths: {
      "jquery": "jquery.min",
      "anjular": "anjular.min"
    }
  });

 上述模塊路徑默認(rèn)與main.js在同一個(gè)目錄(js子目錄)。如果這些模塊在其他目錄,比如js/lib目錄,則有兩種寫法。一種是逐一指定路徑:

require.config({
    paths: {
      "jquery": "lib/jquery.min",
      "anjular": "lib/anjular.min"
    }
  });

 另一種則是直接改變根目錄(baseUrl):

require.config({
    baseUrl: "js/lib",
    paths: {
      "jquery": "jquery.min",
      "anjular": "anjular.min"
    }
  });

 之前的例子中加載模塊都是本地js,但是大部分情況下網(wǎng)頁(yè)需要加載的JS可能來(lái)自本地服務(wù)器、其他網(wǎng)站或cdn,這樣就不能通過(guò)這種方式來(lái)加載了,我們以加載一個(gè)jquery庫(kù)為例:

require.config({
  paths : {
    "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"] 
  }
})

 上面的例子中重復(fù)出現(xiàn)了require.config配置,如果每個(gè)頁(yè)面中都加入配置,必然會(huì)十分麻煩,requirejs提供了一種叫"主數(shù)據(jù)"的功能,我們可以將所有的require.config配置放到main.js中,在頁(yè)面中調(diào)用它,

就可以使每一個(gè)頁(yè)面都使用這個(gè)配置,然后頁(yè)面中就可以直接使用require來(lái)加載所有的短模塊名。

六:AMD模塊的寫法

require.js加載的模塊,采用AMD規(guī)范,也就是說(shuō),模塊必須按照AMD的規(guī)定來(lái)寫。具體來(lái)說(shuō),就是模塊必須采用特定的define()函數(shù)來(lái)定義。如果一個(gè)模塊不依賴其他模塊,那么可以直接定義在define()函數(shù)之中。假定現(xiàn)在有一個(gè)math.js文件,它定義了一個(gè)math模塊。那么,math.js就要這樣寫:

define(function (){
    var add = function (x,y){
      return x+y;
    };
    return {
      add: add
    };
  });

 然后在頁(yè)面中:

require(['math'], function (math){
  alert(math.add(1,1));
});

 如果這個(gè)js文件還依賴其他模塊,那么define()函數(shù)的第一個(gè)參數(shù),必須是一個(gè)數(shù)組,指明該模塊的依賴性。

define(['jquery'], function($){
  $("#div1").css("background-color","red");
})

當(dāng)require()函數(shù)加載上面這個(gè)模塊的時(shí)候,就會(huì)先加載jquery.js文件。

七:第三方模塊

通過(guò)require加載的模塊一般都需要符合AMD規(guī)范即使用define來(lái)申明模塊,但是部分時(shí)候需要加載非AMD規(guī)范的js,這時(shí)候就需要用到另一個(gè)功能:shim:

1. 非AMD模塊輸出,將非標(biāo)準(zhǔn)的AMD模塊變成可用的模塊,例如:在老版本的jquery中,是沒有繼承AMD規(guī)范的,所以不能直接require["jquery"],這時(shí)候就需要shim

require.config({
  shim: {
    "jquery" : {exports : "$"}
  }
})

 這樣配置后,我們就可以在其他模塊中引用jquery模塊:

require(["jquery"], function(_){
  $("#div1").css("background-color","red");
})

 2.插件形式的非AMD模塊,我們經(jīng)常會(huì)用到j(luò)query插件,而且這些插件基本都不符合AMD規(guī)范,比如jquery.form插件,這時(shí)候就需要將form插件加入到j(luò)query中:

require.config({
  shim: {
    "jquery.form" : {
      deps : ["jquery"]
    }
  }
})  
require.config(["jquery", "jquery.form"], function($){
  $(function(){
    $("#form").ajaxSubmit({...});
  })
})

以上是“Require.js有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前名稱:Require.js有什么用
瀏覽地址:http://weahome.cn/article/jhoeio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部