如果你想加載你的整個javascript源碼的每一頁,當然,編譯成一個文件。如果您根據用戶採取的操作或基於加載的頁面加載不同的代碼,請使用AMD加載的模塊。另一種方法是列出一堆腳本標記,這些標記當然只能一次加載一次,可能需要一段時間。
AMD不是一個特定的庫,它實際上是一個用於加載你提到的大多數裝載器使用的JavaScript模塊的標準。這意味着它們都使用類似的語法來定義和加載模塊。他們正在考慮讓AMD成爲ECMA腳本規範的一部分。它的用處是你也可以定義依賴關係,所以如果你的代碼需要運行jQuery,你可以把它列爲一個依賴關係,並且它會被加載到你的模塊名字空間中。
define([ 'jquery' ], function ($) {
// use jquery in here without clouding up the global namespace
return {}; // return your module for use in a different module or whatever
};
在這個例子中,所定義的模塊中的代碼將不被運行,直到jquery的模塊被下載。然後它會將jquery模塊直接注入到新定義的模塊中,作爲參數$
。
您現在可以將代碼整齊地組織到包含模塊的文件中。您的模塊都不會使全局命名空間雲端化。所有的依賴關係都將在你的模塊運行之前一定會被加載(對於相關的代碼,沒有加載競爭條件的bug)。
另一個優點是您可以將您的加載器設置爲對同一模塊使用不同的路徑,因此您可以將jquery
模塊的路徑定義爲'https://ajax.googleapis.com/ajax/libs/jquery /1.8.2/jquery.min.js'放在你的代碼中,儘管它幾乎可以在每個模塊中使用。現在,當我需要將我的jquery版本更新到1.8.3時,我可以簡單地在我的代碼中更改一個點的路徑,並將它用於每個使用jquery
作爲依賴項的模塊。當您使用模塊存根進行測試或某些模塊的調試版本時,這對於輕鬆切換也很有用。
現在,這不是小型項目所必需的。然而,您的項目越大,這種類型的加載開始越有意義。
這是真的嗎? –
@JitendraVyas - 是的,這幾乎都是真的。瀏覽器現在具有腳本標記的'defer'和'async'屬性(您可以閱讀[這裏](http://stackoverflow.com/questions/10808109/script-tag-async-defer/10808243#10808243) ),它們可以在不使用加載器的情況下對簡單腳本標記的時間進行一些控制,但上述所有使用加載器的情況仍然存在。 – jfriend00