一、LABjs 的核心是 LAB(Loading and Blocking):Loading 指非同步並行加載,Blocking 是指同步等待執行。 LABjs 透過優雅的語法(script 和 wait)實現了這兩大特性,核心價值是效能最佳化。 LABjs 是一個檔案載入器。
二、RequireJS 和 SeaJS 則是模組載入器,倡導的是一種模組化開發理念,核心價值是讓 JavaScript 的模組化開發變得更簡單自然。模組載入器也可降級為檔案載入器用,因此使用 RequireJS 和 SeaJS,也可以達成 LABjs 的效能最佳化目的。
三、RequireJS 和 SeaJS 都是很棒的模組載入器,兩者差異如下:
1. 兩者定位有差異。 RequireJS 想成為瀏覽器端的模組載入器,同時也想成為 Rhino / Node 等環境的模組載入器。 SeaJS 則專注於 Web 瀏覽器端,同時透過 Node 擴充的方式可以很方便跑在 Node 伺服器端
2. 兩者所遵循的標準有差異。 RequireJS 遵循的是 AMD(非同步模組定義)規範,SeaJS 遵循的是 CMD (通用模組定義)規範。規範的不同,導致了兩者 API 的不同。 SeaJS 更簡潔優雅,更貼近 CommonJS Modules/1.1 和 Node Modules 規格。
3. 兩者社區理念有差異。 RequireJS 在嘗試讓第三方類別庫修改自身來支援 RequireJS,目前只有少數社群採納。 SeaJS 不強推,而採用自主封裝的方式來“海納百川”,目前已有較成熟的封裝策略。
4. 兩者程式碼品質有差異。 RequireJS 是沒有明顯的 bug,SeaJS 明顯沒有 bug。
5. 兩者對調試等的支援有差異。 SeaJS 透過插件,可以實現 Fiddler 中自動映射的功能,還可以實現自動 combo 等功能,非常方便方便。 RequireJS 無這方面的支持。
6. 兩者的插件機制有差異。 RequireJS 採取的是在原始碼中預留介面的形式,原始碼中留有為插件而寫的程式碼。 SeaJS 採取的插件機制則與 Node 的方式一致:開放自身,讓插件開發者可直接存取或修改,從而非常靈活,可以實現各種類型的插件。
還有不少細節差異就不多說了。
總之,SeaJS 從 API 到實現,都比 RequireJS 更簡潔優雅。如果說 RequireJS 是 Prototype 類別庫的話,則 SeaJS 是 jQuery 類別庫。
最後,向 RequireJS 致敬! RequireJS 和 SeaJS 是好兄弟,一起努力推廣模組化開發思想,這才是最重要的。