seajs與requirejs在模組的載入方面是沒有差異的,無論是requirejs在定義模組時定義的依賴模組,還是seajs在factory函式中require的依賴模組,在會在載入當前模組時被載入,非同步,並且順序不可控。差異在於factory函式執行的時機。
為了增強對比,我們在定義依賴模組的時候,故意讓它們的factory函式要執行相當長的時間,比如1秒:
//為了增強對比,設定了三組進行對照試驗,分別是:dep_a.js定義如下,dep_b、dep_c定義同理
define(
function
(require, exports, module)
})(window.exe_time);
= 1;此處會連續執行1s
exports.foo = function
() })
//接下來我們看看**執行的瀑布圖:require.js:
require(["dep_a", "dep_b", "dep_c"], function
(a, b, c) );
define(function
(require, exports, module) );
定義依賴但並不require):
define(["dep_a", "dep_b", "dep_c"], function
(require, exports, module)
1.require.js:在載入完依賴模組之後立即執行了該模組的factory函式
2.sea.js: 下面兩張圖應該放在一起比較。兩處**都同時載入了依賴模組,但因為沒有require的關係,第三張圖中沒有像第二張圖那樣執行耗時的factory函式。可見seajs執行的原則正如cmd標準中所述execution must be lazy。
我想進一步表達的是,無論requirejs和seajs,通常來說大部分的邏輯**都會放在模組的factory函式中,所以factory函式執行的代價是非常大的。但上圖也同樣告訴我們模組的define,甚至模組檔案的evaluate代價非常小,與factory函式無關。所以我們是不是應該盡可能的避免執行factory函式,或者等到我們需要的指定功能的時候才執行對應的factory函式?比如:
document.body.onclick = function()
SeaJS 與 RequireJS 的差異
cmd 模組依賴宣告方式 define function require cmd 依賴是就近宣告,通過內部require方法進行宣告。但是因為是非同步模組,載入器需要提前載入這些模組,所以模組真正使用前需要提取模組裡面所有的依賴。無論是載入器即時提取,還是通過自動化工具預先提取,cmd 的這種依賴宣...
SeaJS與RequireJS最大的區別
如下模組通過seajs requirejs來載入,執行結果會是怎樣?define function require,exports,module 猜猜看?先試試seajs的執行結果 很正常嘛,我也是這麼想的.再來是requirejs的執行結果 神馬情況?你他麼是在逗我嗎?requirejs你坑的我一...
SeaJS 與 RequireJS 的差異對比
這篇文章主要介紹了seajs 與 requirejs 的差異對比,本文主要對cmd規範和amd規範的弊端做了對比,並做出了乙個總結,需要的朋友可以參考下 歷史不是過去,歷史正在上演。隨著 w3c 等規範 以及瀏覽器的飛速發展,前端的模組化開發會逐步成為基礎設施。一切終究都會成為歷史,未來會更好。引用...