一、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 是好兄弟,一起努力推廣模組化開發思想,這才是最重要的。