WARNING: you are not looking at the live version but at an older version.

Choosing a JavaScript library

Intro

We need a library to provide common, reusable functionality and save us from writing lots of repetitive code. We do not want to write one ourselves because it saves time to use an existing one, plus these libraries are more likely to contain fewer bugs because of the significant user base.

Javascript Library requirements

  1. base for client-side restletport
  2. cross-browser issues:
    • syntax
    • DOM model
    • event model
  3. dynamic loading of js-files
  4. event binding
  5. unit testing
  6. (widgets, effects)
  7. integration of external widgets (Simile)
  8. size, stability, maturity
  9. compression
  10. i18n

The contestants


Latest (non-beta) release
Size
the good
the bad

Licence

Browser compatibility

Dojo

1.0.2 (12/15/07)

50kb+

  • OOP
  • CSS3
  • buildsystem with compression
  • unittest
  • widgets (Dijit)
  • buggy
  • ugly code
  • big

modified BSD or Academic Free 2.1

Safari 3.0.x
Opera 9.0+
IE 6.0+
FF1.5+
Konqueror 3.5+

Prototype

1.6.0.2 (01/25/08)

~120kb

  • poor documentation
  • extends Object.prototype (here and here)

MIT

IE 6.0+
FF1.0+/Mozilla 1.7+
Safari 1.2+

jQuery

1.2.2 (01/14/08)

~26kb

  • documentation
  • easy to use
  • fast
  • CSS 1-3, basic xpath
  • CSS selector
  • lightweight
  • chainable
  • plugins
  • namespaced
  • jQuery UI for widgets
  • only selector+effects+some-XHR
  • only for simple and small projects

MIT or GPL

FF1.5+
IE 6+
Safari 2.0.2+
Opera 9+

Ext JS

2.0.1 (01/23/08)

500kb

  • support
  • good collection of widgets
  • UI-centric (+ or -)
  • on top of jquery/yui/prototype or standalone
  • fast

LGPL 3.0

IE 6+
FF1.5+
Safari 2+
Opera 9+

Yahoo UI Library

2.4.1 (12/19/07)

29kb+

  • history manager
  • documentation
  • modular
  • event driven
  • namespaced
  • CSS framework
  • slow
  • big
  • complex

BSD

IE 6+
FF1.5+
Safari 2+
Opera 9+

MooTools

1.1 (05/07/07)

9kb+

  • lightweight
  • fast
  • easy
  • modular
  • Object Oriented
  • chainable

MIT

IE 6+
FF
Safari
Opera
Camino

qooxdoo

0.7.3 (01/14/08)

  • buildsystem for optimazing  and packaging
  • namespace
  • event binding
  • cross-browser back button support
  • bookmarkability
  • AOP
  • non-CSS-based styling

LGPL or EPL

IE 5.5+
FF 1.0+/Mozilla 1.3+
Opera 8+
Safari 3

Rico

2.0rc (01/29/08)

  • based on prototype
  • few features

Apache 2.0

IE 5.5+
FF 1.0/Win
Camino/Mac
Firefox 1.5x/Mac
Safari 2.0.3

GWT

1.4.61 (11/03/07)

  • browser history
  • JUnit
  • i18n
  • Java compiled to javascript

Apache 2.0

IE
Firefox
Mozilla
Safari
Opera

Disqualified:

Popularity (by number of searches)

gtrends-javascript-libraries

The other frameworks (qooxdoo, Rico, Ext js) didn't have enough search volume to show up on the graph. The seeming extreme popularity of Prototype is caused by the added searches for the prototype object of JavaScript.

GWT wrappers

GWT + ExtJS: gwt-ext, MyGWT
GWT + Dojo: Tatami
GWT + Simile Timeline: gwtsimiletimeline
GWT + Script.aculo.us: Script.aculo.us integration

Java + qooxdoo: QWT

Test 1: GWT Integration

Test 2: Simile

Test 3: i18n support

  • Dojo: has a specific i18n module (*).
  • jQuery: no built-in i18n support. Localization is available for the datepicker-widget
  • Prototype: no built-in i18n support.
  • ExtJS: localization support (*, *).
  • YUI: no built-in i18n support, there is however an internationalization plugin (*).
  • MooTools: no built-in i18n support.
  • qooxdoo: i18n and L10n are fully supported (*).
  • GWT: internationalization support (*).

Test 4: Unit test

  • qooxdoo: testrunner
  • Prototype: there's a test framework that can be extended for custom unit tests (*).
  • jQuery: internal test framework
  • Dojo: has a unit testing harness, D.O.H.
  • MooTools: no unit testing
  • Ext JS: no unit testing (*, *)
  • YUI: YUI Test
  • GWT: JUnit integration

Standalone unit test tools:

Test 5: Custom widget

The first 4 loosers

  1. Rico:
    • small community
    • low support
Comments (2)