javascript libraries (kings of code)

83
JavaScript Libraries John Resig - May 2008 http://ejohn.org / http://twitter.com/jeresig/

Upload: jeresig

Post on 26-Jan-2015

114 views

Category:

Technology


4 download

DESCRIPTION

Kings of Code (May 2008).

TRANSCRIPT

Page 1: JavaScript Libraries (Kings of Code)

JavaScript LibrariesJohn Resig - May 2008

http://ejohn.org/http://twitter.com/jeresig/

Page 2: JavaScript Libraries (Kings of Code)

Question: How do you want to write JavaScript?

Page 3: JavaScript Libraries (Kings of Code)

1) Plug-and-Play

• Drop in a “calendar widget” or “tabbed navigation”

• Little, to no, JavaScript experience required.

• Just customize some options and go.

• No flexibility.

Page 4: JavaScript Libraries (Kings of Code)

2) Some Assembly Required

• Write common utilities

• Click a link, load a page via Ajax

• Build a dynamic menu

• Creating interactive forms

• Use pre-made code to distance yourself from browser bugs.

• Flexible, until you hit a browser bug.

Page 5: JavaScript Libraries (Kings of Code)

3) Down-and-Dirty

• Write all JavaScript code from scratch

• Deal, directly, with browser bugs

• Quirksmode is your lifeline

• Excessively flexible, to the point of hinderance.

Page 6: JavaScript Libraries (Kings of Code)

What we’ve just seen...

• Widgets

• Libraries

• Raw JavaScript

Page 7: JavaScript Libraries (Kings of Code)

What we’ve just seen...

• Widgets

• Libraries

• Raw JavaScript

Page 8: JavaScript Libraries (Kings of Code)

Why use a library?

• Makes JavaScript bearable

• Gets the job done fast

• Simplifies cross-browser support

• Sort of like C stdlib - no one just codes all of C by hand

Page 9: JavaScript Libraries (Kings of Code)

What kind of libraries exist?Open Source Commercial

Client/ Server

AjaxCFCQcodo

AtlasBackbase for

Struts

Browser Only

PrototypejQuery

Yahoo UIDojo

BackbaseSmartClient

Page 10: JavaScript Libraries (Kings of Code)

What kind of libraries exist?Open Source Commercial

Client/ Server

AjaxCFCQcodo

AtlasBackbase for

Struts

Browser Only

PrototypejQuery

Yahoo UIDojo

BackbaseSmartClient

Page 11: JavaScript Libraries (Kings of Code)

Open Source LibrariesBrowser Only Client/Server

Task Specific

Scriptaculousmoo.fx

Open Rico

AjaxCFCQcodo

General Purpose

PrototypejQuery

Yahoo UIDojo

Ruby on RailsCakePHP

Page 12: JavaScript Libraries (Kings of Code)

Open Source LibrariesBrowser Only Client/Server

Task Specific

Scriptaculousmoo.fx

Open Rico

AjaxCFCQcodo

General Purpose

PrototypejQuery

Yahoo UIDojo

Ruby on RailsCakePHP

Page 13: JavaScript Libraries (Kings of Code)

Why these libraries?

Page 15: JavaScript Libraries (Kings of Code)

Google Trends

jQueryPrototype

DojoYahoo UI

http://google.com/trends?q=prototype+javascript%2C+jquery+javascript%2C+yui+javascript%2C+dojo+javascript&ctab=0&geo=all&date=all&sort=0

Page 16: JavaScript Libraries (Kings of Code)

Others

• MooTools

• ExtJS

• Ajax.NET

Page 17: JavaScript Libraries (Kings of Code)

The Libraries

Page 18: JavaScript Libraries (Kings of Code)

Prototype

Page 19: JavaScript Libraries (Kings of Code)

Prototype: Overview

• Started early 2005 by Sam Stephenson

• Incredibly popular, tied with Ruby on Rails’ popularity

• Development backed by 37 Signals

Page 20: JavaScript Libraries (Kings of Code)

Prototype: Focus

• Improving the usability of the JavaScript language

• Big emphasis on adding in ‘missing’ JavaScript features

• Clean structure, clean objects and ‘classes’

Page 21: JavaScript Libraries (Kings of Code)

Prototype: Details

• Code quality is fantastic, great features

• All animations (and interactions) are in Scriptaculous

• Updated frequently

• Looking at Prototype 1.6.0.2

Page 22: JavaScript Libraries (Kings of Code)

jQuery

Page 23: JavaScript Libraries (Kings of Code)

jQuery: Overview

• Released January 2006 by John Resig

• Rapid rise in popularity

• Many developers across the globe

Page 24: JavaScript Libraries (Kings of Code)

jQuery: Focus

• Improving the interaction between JavaScript and HTML

• Finding elements then performing actions

• Highly-effective, short, code

Page 25: JavaScript Libraries (Kings of Code)

jQuery: Details

• Core features are limited to DOM, Events, Effects, Ajax

• Other features can be added in via plugins

• Looking at jQuery 1.2.6

Page 26: JavaScript Libraries (Kings of Code)

Yahoo! UI

Page 27: JavaScript Libraries (Kings of Code)

YUI: Overview

• Released Feb 2006 by Yahoo!

• Maintained and financed internally

• Attempt to standardize internal JavaScript

• Say ‘hi’ to Nate Koechley!

Page 28: JavaScript Libraries (Kings of Code)

YUI: Focus

• Exposing, and solving, common methodologies

• Looking for common idioms (Drag-and-Drop, Calendar, Auto-Complete)

• Looking at Yahoo UI 2.5.1

Page 29: JavaScript Libraries (Kings of Code)

Dojo

Page 30: JavaScript Libraries (Kings of Code)

Dojo: Overview

• Started early 2005 by Alex Russell + Co.

• Large development community

• Lots of corporate backing (IBM, AOL)

• Big code base, tons of features

Page 31: JavaScript Libraries (Kings of Code)

Dojo: Focus

• Building complete web applications

• A package heirarchy, e.g.:dojo.addClass( ... )

• Focus has transcended into widgets (Dijit)

• Huge number of features

• Today we’re looking at Dojo 1.1.1

Page 32: JavaScript Libraries (Kings of Code)

What should a library have?

Page 33: JavaScript Libraries (Kings of Code)

Code Base

• Core Functionality

• DOM

• Events

• Ajax

• Animations

• User Interface Widgets

Page 34: JavaScript Libraries (Kings of Code)

Development

• Good Architecture

• Open Licensing

• Wide Browser Support

• Small File Size

Page 35: JavaScript Libraries (Kings of Code)

Project

• Development Team (Open, Funded)

• Code in SVN / Bug Tracker

• Good Unit Test Coverage

Page 36: JavaScript Libraries (Kings of Code)

Documentation

• Full API Coverage

• Plenty of Tutorials

• Some Books

• Wide variety of Demos

Page 37: JavaScript Libraries (Kings of Code)

Community

• Active Mailing List / Forum

• Support and Training

• Popularity

Page 38: JavaScript Libraries (Kings of Code)

Code Base

• Core Functionality

• DOM

• Events

• Ajax

• Animations

• User Interface Widgets

Page 39: JavaScript Libraries (Kings of Code)

Core Functionality

• Bare minimum needed to make a dynamic “Ajax” web site:

• DOM (Traversal and Manipulation)

• Events

• Ajax

• Animations

Page 40: JavaScript Libraries (Kings of Code)

DOM

• Traversal

• Using CSS selectors to locate elements

• Modification

• Create/remove/modify elements

• Having a DOM builder is important

Page 41: JavaScript Libraries (Kings of Code)

DOM Traversal

• Prototype:$$(“table > tr”)

• jQuery:$(“div > p:nth-child(odd)”)

• Dojo:dojo.query(“table tr:nth-child(even)”)

• Yahoo UI:YAHOO.util.Selector.query('div p')

Page 42: JavaScript Libraries (Kings of Code)

DOM Modification

• Prototype:Insertion.Bottom(“list”,”<li>Another item</li>”);

• jQuery:$(“#li”).append(“<li>An item</li>”);

• Dojo and Yahoo UI have weak support - no DOM building capabilities, basic property modification

Page 43: JavaScript Libraries (Kings of Code)

Events• Support for simple event binding/removal

• Support for custom events is essential

• Prototype:Event.observe(“button”,”click”, function(){ alert(“Thanks for the click!”);});

• jQuery:$(“div”).click(function(){ alert(“div clicked”);});

Page 44: JavaScript Libraries (Kings of Code)

Events (cont.)

• Yahoo UI:YAHOO.util.Event.addEventListener(“list”, “click”, function(){ alert(“List Clicked”);});

• Dojo:dojo.connect(dojo.byId("mylink"), "click", function(){ alert(“Link clicked”);});

Page 45: JavaScript Libraries (Kings of Code)

Custom Events

• $(“#list”).bind(“drag”, function(){ $(this).addClass(“dragged”);});

• $(“#test”).trigger(“drag”);

Page 46: JavaScript Libraries (Kings of Code)

Ajax• Request and load remote documents

• Prototype:new Ajax.Request(“test.html”, { method: “GET”, onComplete: function(res){ $(‘results’).innerHTML = res.responseText; }});

• jQuery:$(“#results”).load(“test.html”);

Page 47: JavaScript Libraries (Kings of Code)

Ajax (cont.)• Yahoo UI

YAHOO.util.Connect.asyncRequest( 'GET', “test.html”, function(data){ YAHOO.util.Dom.id(“results”).innerHTML = data; });

• Dojodojo.io.bind({ url: "test.html", method: "get", mimetype: "text/html", load: function(type, data) { dojo.byId(“results”).innerHTML = data; }});

Page 48: JavaScript Libraries (Kings of Code)

Ajax (cont.)

• jQuery is only one capable of doing DOM traversing over XML

• jQuery.get(“test.xml”, function(xml){ $(“user”, xml).each(function(){ $(“<li/>”).text( $(this).text() ) .appendTo(“#userlist”); });});

Page 49: JavaScript Libraries (Kings of Code)

Animations

• Simple animations (hide/show/toggle)

• Provide elegant transitions

• No animations in Prototype Core (see Scriptaculous, instead)

• jQuery:$(“#menu”).slideDown(“slow”);

Page 50: JavaScript Libraries (Kings of Code)

Animations (cont.)

• Yahoo UI:new YAHOO.util.Anim(“list”, { width: { from: 10, to: 100 } }, 1, YAHOO.util.Easing.easeOut);

• Dojo:dojo.fadeOut({ node: dojo.byId(“list”), duration: 500 });

Page 51: JavaScript Libraries (Kings of Code)

Core Feature Summary

DOM Events Anim. Ajax

Prototype X X - X

jQuery X X X X

Yahoo UI / X X X

Dojo / X X X

Page 52: JavaScript Libraries (Kings of Code)

User Interface Widgets

• Difficult to implement components, made easy

• Commonly used, save duplication

• Some common components:Drag & Drop, Tree, Grid, Modal Dialog,Tabbed Pane, Menu / Toolbar, Datepicker, Slider

Page 53: JavaScript Libraries (Kings of Code)

User Interface Packages

• Only looking at officially-supported code:

• Prototype has Scriptaculous

• jQuery has jQuery UI

• Dojo has Dijit

• Included in Yahoo UI

Page 54: JavaScript Libraries (Kings of Code)

Drag & Drop

• Drag an item from one location and drop in an other

• Supported by all libraries

Page 55: JavaScript Libraries (Kings of Code)

Tree

• A navigable hierarchy (like a folder/file explorer)

• In Dojo and Yahoo UI

Page 56: JavaScript Libraries (Kings of Code)

Grid

• An advanced table (resizable, editable, easily navigable)

• In Dojo and Yahoo UI

Page 57: JavaScript Libraries (Kings of Code)

Modal Dialog

• Display confined content (usually drag & droppable) and confirmation dialogs

• In Dojo, Yahoo UI, and jQuery

Page 58: JavaScript Libraries (Kings of Code)

Tabbed Pane

• Multiple panes of content navigable by a series of tabs

• In Dojo, Yahoo UI, and jQuery

Page 59: JavaScript Libraries (Kings of Code)

Menu / Toolbar

• A list of navigable items (with sub-menus)

• In Dojo and Yahoo UI

Page 60: JavaScript Libraries (Kings of Code)

Datepicker

• An input for selecting a date (or a range of dates)

• In Dojo, Yahoo UI, and jQuery

Page 61: JavaScript Libraries (Kings of Code)

Slider

• A draggable input for entering a general, numerical, value

• In all libraries

Page 62: JavaScript Libraries (Kings of Code)

Tons More!

• Color Picker (Dojo, YUI)

• Layout (Dojo, YUI)

• Auto Complete (Dojo, Proto, YUI)

• Selectables (Proto, jQuery)

• Accordion (Dojo, jQuery)

• WYSIWYG (Dojo, YUI)

Page 63: JavaScript Libraries (Kings of Code)

Themeing

• A consistent look-and-feel for widgets

• jQuery, Yahoo UI, and Dojo provide themeing capabilities

• jQuery’s and Yahoo UI’s are documented

Page 64: JavaScript Libraries (Kings of Code)

Accessibility

• Taking in to consideration points from ARIA (Accessible Rich Internet Applications)

• Dojo is taking a solid lead, here

• jQuery received funding and is working on ARIA integration to jQuery UI

Page 65: JavaScript Libraries (Kings of Code)

Development

• Good Architecture

• Open Licensing

• Wide Browser Support

• Small File Size

Page 66: JavaScript Libraries (Kings of Code)

Architecture

• Bottom Up (Prototype, jQuery) vs. Top Down (Dojo, Yahoo UI)

• jQuery, Dojo, and Yahoo UI all use a single namespace

• Prototype extends native objects (high likelihood of inter-library conflict)

• jQuery is extensible with plugins

• Dojo uses a package system

Page 67: JavaScript Libraries (Kings of Code)

Licensing

• All use liberal licenses (“Keep my name on the file, don’t sue me.”)

• MIT:Prototype, jQuery

• BSD:Yahoo UI, Dojo

Page 68: JavaScript Libraries (Kings of Code)

Browser Support

• Everyone supports:IE 6+, Firefox 2+, Safari 2+, Opera 9+

• Note:

• Most are in the process of dropping support for Safari 2

Page 69: JavaScript Libraries (Kings of Code)

File Size

• Serving your JavaScript minified + Gzipped

• Optimal level of compression and speed

• Core file size (in KB):

0

8.75

17.50

26.25

35.00

Prototype jQuery Yahoo UI Dojo

Page 70: JavaScript Libraries (Kings of Code)

Project

• Development Team (Open, Funded)

• Code in SVN / Bug Tracker

• Good Unit Test Coverage

Page 71: JavaScript Libraries (Kings of Code)

Development Team

• Prototype, jQuery, and Dojo all have open development (anyone can contribute)

• jQuery, Yahoo UI, and Dojo all have paid, full-time, developers working on the code

• All have paid, part-time, developers

Page 72: JavaScript Libraries (Kings of Code)

SVN / Bug Tracker

• Prototype, jQuery, and Dojo all have code in a public SVN repositories

• Yahoo UI’s development is private and is limited to Yahoo employees

• They’re working to fix this!

• All libraries have a public bug tracker

Page 73: JavaScript Libraries (Kings of Code)

Unit Tests

• All libraries have some automated unit tests

• jQuery, Yahoo UI, and Dojo all have public unit test URLs

• jQuery and Dojo have tests that can run in Rhino

Page 74: JavaScript Libraries (Kings of Code)

Documentation

• Full API Coverage

• Plenty of Tutorials

• Some Books

• Wide variety of Demos

Page 75: JavaScript Libraries (Kings of Code)

API Documentation

• Prototype, jQuery, and Yahoo UI all have full coverage

• jQuery provides runnable examples with each API item

• Dojo’s coverage is improving - work in progress (dojocampus.org, etc.)

Page 76: JavaScript Libraries (Kings of Code)

Tutorials

• All libraries provide some tutorials

• jQuery, Yahoo UI, and Dojo have screencasts/presentations

• Prototype: 6

• jQuery: 118 (English)

• Yahoo UI: Numerous (each component has at least one)

• Dojo: 24

Page 77: JavaScript Libraries (Kings of Code)

Books• Prototype:

• Prototype and Scriptaculous in Action (Manning)

• Prototype and Scriptaculous (Pragmatic)

• jQuery:

• Learning jQuery (Packt)

• jQuery Reference Guide (Packt)

• Yahoo UI:

• Learning the Yahoo UI Library (Packt)

• Dojo: 3 books coming in 2008

Page 78: JavaScript Libraries (Kings of Code)

Demos

• Yahoo UI provides a considerable number of live demos and examples for all features

• jQuery provides live examples and a few demo applications

• Dojo provides demo applications for their widgets

Page 79: JavaScript Libraries (Kings of Code)

Community

• Active Mailing List / Forum

• Support and Training

• Popularity

Page 80: JavaScript Libraries (Kings of Code)

Mailing List / Forum

• Prototype, jQuery, and Yahoo UI have mailing lists

• Prototype: 23 posts/day

• jQuery: 76 posts/day

• Yahoo UI: 56 posts/day

• Dojo has an active forum

Page 81: JavaScript Libraries (Kings of Code)

Support and Training

• Dojo provides paid support and training (via Sitepen)

• jQuery provides paid jQuery UI support and training (via Liferay)

Page 82: JavaScript Libraries (Kings of Code)

Popularity

• Who uses what:

• Prototype: Apple, ESPN, CNN, Fox News

• jQuery: Google, Amazon, Digg, NBC, Intel

• Yahoo: Yahoo, LinkedIn, Target, Slashdot

• Dojo: IBM, AOL, Mapquest, Bloglines

Page 83: JavaScript Libraries (Kings of Code)

More Information

• Prototype:http://prototypejs.org/

• jQuery:http://jquery.com/

• Yahoo UI:http://developer.yahoo.com/yui/

• Dojo:http://dojotoolkit.org/