隨筆-5  評論-1  文章-0  trackbacks-0

          RequireJS 發(fā)布 1.0.0 了,很值得關(guān)注,看是否有可借鑒之處。
          本次比較不涉及具體實現(xiàn)代碼,主要比較兩者的 API 設(shè)計。

          http://requirejs.org
          http://seajs.com

          從定位談起

          首先,從 requirejs.org 首頁可以得知,RequireJS 的定位是:

          RequireJS 是一個 JavaScript 文件和模塊加載器,特別為瀏覽器優(yōu)化,同時也可運行在 Rhino 和 Node 環(huán)境中。

          SeaJS 的定位是:

          SeaJS 是一個適用于瀏覽器端的 JavaScript 模塊加載器。

          不要小看這兩句話,任何類庫/框架的定位,或者說愿景/目標,最終會決定該類庫/框架的方方面面。比如:

          RequireJS 的定位中,除了是模塊加載器,還是文件加載器,這決定了 RequireJS 需要實現(xiàn)類似 LABjs 等 script loader 的功能。
          LABjs 的核心功能是異步加載腳本并提供運行的依賴等待: 

          1$LAB
          2   .script("a.js")
          3   .script("b.js").wait()
          4   .script("c.js");

          為了提供類似功能,RequireJS 開發(fā)了 order 插件:

          1require(["order!one.js", "order!two.js", "order!three.js"], function () {
          2    //This callback is called after the three scripts finish loading.
          3});

          order 功能是 JavaScript 文件加載器必備的功能,RequireJS 有文件加載器的定位,因此才有了 order 插件的設(shè)計。

          而對于 SeaJS 來說,定位為很純粹的模塊加載器,因此不需要考慮普通腳本的 order 加載,如果需要腳本加載功能,直接和 LABjs 一塊用就好:

          1define(function(require) {
          2  var $LAB = require('labjs/2.0.3/lab.js');
          3 
          4   $LAB
          5      .script('a.js')
          6      .script('b.js').wait()
          7      .scrpt('c.js');
          8);

          SeaJS 推薦用組合的思路解決問題:LABjs + SeaJS = JavaScript 文件和模塊加載器。

          上面是 SeaJS 的狹義定位,SeaJS 還有一個廣義定位:

          SeaJS 是瀏覽器端的 NodeJS.

          在廣義定位下,SeaJS 包括以下部分:

          1. 一套模塊書寫格式。
          2. 一個適用于瀏覽器端的模塊加載器。
          3. 一組默認推薦的模塊。
          4. 類似 npm 的包管理工具。
          5. 調(diào)試等開發(fā)者工具。
          6. 等等。

          狹義定位對應(yīng) github 中的:seajs/seajs
          廣義定位對應(yīng) github 中的:seajs

          RequireJS 和 SeaJS 狹義定位上的差異,將直接導致兩者之間的最佳使用場景和 API 設(shè)計差異,后續(xù)博文會進一步提及。

          SeaJS 廣義定位中的定語很重要,是“瀏覽器端的”,這將直接決定 SeaJS 和 NodeJS 的差異,后續(xù)博文會進一步提及。

          兼容性

          requirejs.org 首頁還列舉了 RequireJS 支持的瀏覽器,這和 SeaJS 沒什么差異。其實兩者涉及到的 DOM 操作都不多,大部分代碼是純 JavaScript 代碼,兼容性上都很不錯。

          參考文章

          posted on 2011-12-22 23:01 古木天琪 閱讀(2284) 評論(0)  編輯  收藏 所屬分類: jQuery技術(shù)HTML5技術(shù)
          主站蜘蛛池模板: 昌图县| 翼城县| 苏州市| 沐川县| 镇安县| 建德市| 和平县| 思南县| 永康市| 钟祥市| 嵩明县| 大姚县| 灵山县| 泾源县| 凉山| 曲麻莱县| 福海县| 开阳县| 灵山县| 中方县| 如东县| 永善县| 福鼎市| 夹江县| 淮南市| 出国| 万盛区| 左权县| 新源县| 双峰县| 祥云县| 彭阳县| 庆元县| 北碚区| 仁布县| 工布江达县| 绍兴县| 铁岭市| 秦皇岛市| 阳城县| 江孜县|