隨筆-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ù)
          主站蜘蛛池模板: 稷山县| 余庆县| 潼关县| 奉化市| 大丰市| 江油市| 额尔古纳市| 曲阳县| 怀宁县| 仙桃市| 邹城市| 武功县| 元阳县| 大埔区| 佛学| 凌海市| 蚌埠市| 齐河县| 湄潭县| 丽水市| 莆田市| 浪卡子县| 日喀则市| 江门市| 通化县| 拉萨市| 安仁县| 平潭县| 肃北| 尉氏县| 名山县| 广平县| 台前县| 中卫市| 共和县| 屏东县| 辽阳市| 乌海市| 梁山县| 连城县| 延吉市|