為甚麼選擇 Dojo?- 第二部份:Dojo 與其他 JavaScript 工具的比較
阿恆
以下是 Dojo 官方網站上刊登的「為甚麼選擇 Dojo?」中文翻譯的第二部份,希望有助大家認識 Dojo 這個 JavaScript 工具庫,第一部份已於較早前發表。
有其他幾個工具往往與 Dojo 比較,以下不是一個全面的比較,只是 Dojo 與這些替代工具的特點和設計目標一個高層次的比較,這些替代工具在特徵、開發過程,以及哲學與 Dojo 的異同。
- MonchiKit: MochiKit 是一個高質量的 JavaScript 工具,它使編寫 JavaScript 指令合理可行,同時又具有良好的性能。它在封包、命名、和全域名命名空間的使用上,遵循了許多與 Dojo 相同的保守原則。MonchiKit 主要由 Bob Ippolito 編寫,它具有豐富文檔的和測試工具,但不像 Dojo 它沒有一套 widget 系統或廣泛的組件集。它的一些代碼與 Dojo 共享(當然是根據 CLA)。Mochi 背後並沒有正式的團體支持,開發分支也沒有核實,但它的執照很寬鬆。
- Prototype + Scriptaculous:這些受到廣泛採用的程式庫提供許多與 Dojo 核心相同的功能,但對於全域命名衝突、對常用功能命名上偏袒較短名稱等方面,與 Dojo 的保守哲學不同。他們具有良好的文檔和廣泛的社群支持,以及與 Ruby On Rails(包括其他開發架構)嚴密整合。Scriptaculous 提供一些 controls(自動完成、滑標等),但它不是一個 widget 工具箱,也不支援輕鬆地建設 widget。Prototype + Scriptaculous 有很多附加程式庫可供選擇,但他們的發佈版本卻不包含這些程式庫。他們沒有一個封包或編譯系統(除了自己的發佈的版本外),Prototype 和 Scriptaculous 背後並沒有正式的團體支持,開發分支也沒有核實,但它們的執照很寬鬆。
- YUI: YUI 是在雅虎內部研發,特點是廣泛而高質量的文件和範例,YUI 首重速度,以 PHP 的專業開發人員為目標,它是以雅虎的應用規模及需要為設計目標,它提供的 controls 名單與日俱增,它的 CSS 正規化和佈局風格表可作為有用的工具。YUI 沒有封包系統,但它把包含常用功能的檔案「捲起」來發佈,文件清楚說明檔案載入的次序。YUI 不提供 CSS 查詢或標籤驅動的 widget 建造系統。YUI 有一個活躍的社群和自由的執照,但外部開發人員不准參予該項目,雅虎也沒有澄清這個工具的開發分支和其它知識產權的事宜,沒有原碼版本控制可供存取。 YUI 邊緣緩存在雅虎的 CDN 上供所有人下載。
- JQuery:JQuery 是一個主要側重於操作 DOM 結構的最基本系統,它的特徵是混合使用 XPath / CSS 查詢語言(Dojo 使用標準 CSS 3 語法),並為查詢的結果提供一套豐富的選項和操作。JQuery 把 Ajax、各種效果、以及其他工具程式放入一個小型的核心(除了 MooTools 它是最小的)。雖然 JQuery 沒有 widget 或封包系統,但可以使用由其他人在 JQuery 之上建立的組件庫。JQuery 的社群高度活躍,而且通常熱心助人,也接受外界提供的貢獻和補丁。系統有良好的文件資料,以便隨時查閱。JQuery 是 MIT 和 GPL 雙重執照,所有著作權屬於 John Resig。目前尚不清楚其他貢獻者如何把知識產權權利轉讓給 John,以及以甚麼條件轉讓。有幾個開發架構(比較突出的是 Drupal)結合了 JQuery。
- EXT:像 Dojo 的 Dijit 系統,EXT 是一個組件庫,它展示了大量一致的、好看的 widget,並著重精確到像素的佈局,與及在跨瀏覽器上實現桌面應用程式一樣的用戶介面。EXT 原先是在 YUI 上開發,其後轉到 JQuery,現在有了自己的低層程式庫,撤消對第三方的依賴。EXT 社群非常活躍,程式庫也有良好的文檔。它是根據 LGPL 執照條款,也有多種不同的商業執照。目前尚不清楚是否接受外部捐款(和在甚麼條件下),只限於以某些方法在財政上支持該項目的人士可以匿名進入 subversion。
- GWT:GWT 直接集成了服務器端和客戶端的開發工作,它採取的觀點認為 JavaScript是一個要被解決的程式臭蟲,而利用先進的編譯器技術,讓開發人員編寫 Java 程式,然後產生具有 Google 風格的、動態的、基於 JavaScript 的用戶介面。預設 widget 集是 Dijit 的一個嚴格子集,但 GWT 花很多工夫來優化生成的代碼,它越來越豐富的附加程式庫可提升預設的組件。GWT 不像 YUI 或 EXT,它以一個真正的開放源碼項目來運作,允許外部 committers,開放地進行開發工作,同時採用一個非常先進的方式處理知識產權問題的(CLA、代碼審查等等,很像 Apache 或 Dojo)。GWT 應用程式只可以使用 Java 編寫,並大多部署在 Java 容器中。文檔齊備,也有一個樂於助人的社群。
為求比較,Dojo:
- 允許外部 committers 及用 CLA(彷如 GWT 或 Apache),以確保沒有任何知識產權問題
- 有很大方的執照,並提供匿名的 svn 給所有人
- 提供一個相對豐富的客戶端組件集,並且無須綑綁到任何伺服器端的語言(「是協定,不是應用程式介面」)
- 嘗試在特殊功能和常用功能之間取得平衡,Dojo Base 的體積與 Prototype 差不多
- 盡力不干擾頁面上其他原碼,以及保存全域命名
- 邊緣緩存在 AOL CDN 上,任何人都可以取用
- 提供封包系統,以便在不定的問題上自行決定載入的次序
- 容許透過標籤提昇功能,並提供一套非常易用的 widget 系統來建立你的可重複使用組件,這些組件可以透過標籤來實現