SeaJs與RequireJs執行差異

2022-03-22 05:17:47 字數 1273 閱讀 1471

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 等規範 以及瀏覽器的飛速發展,前端的模組化開發會逐步成為基礎設施。一切終究都會成為歷史,未來會更好。引用...