the mysteries of javascript-fu (@media sf edition)

82
THE MYSTERIES OF JAVASCRIPT-FU Dan Webb ([email protected] )

Upload: danwrong

Post on 26-Jan-2015

10.748 views

Category:

Technology


0 download

DESCRIPTION

The version of JS-fu as presented at @media SF. Contains a section on testing and debugging that isn't in the RailsConf version.

TRANSCRIPT

Page 1: The Mysteries Of JavaScript-Fu (@media SF Edition)

THE MYSTERIES OF JAVASCRIPT-FU

Dan Webb ([email protected])

Page 2: The Mysteries Of JavaScript-Fu (@media SF Edition)

About Me ❖ JavaScript hacker for

6 years

❖ Ruby/Rails for 2 years

❖ Author of Low Pro, DOM Builder, Sumo and other stuff

❖ Prototype Core Team

❖ http://danwebb.net

Page 3: The Mysteries Of JavaScript-Fu (@media SF Edition)

A peasant’s language

Page 4: The Mysteries Of JavaScript-Fu (@media SF Edition)

Web 2.0 has forced ‘real’ programmers to

master it

Page 5: The Mysteries Of JavaScript-Fu (@media SF Edition)

JavaScript-Fu is not easy to master

Page 6: The Mysteries Of JavaScript-Fu (@media SF Edition)

The web is awash with bad examples and

worse resources

Page 7: The Mysteries Of JavaScript-Fu (@media SF Edition)

Developers forced into refuge behind libraries

and frameworks

Page 8: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 9: The Mysteries Of JavaScript-Fu (@media SF Edition)

THE ANCIENT MANUALS OF JAVASCRIPT-FU

❖ The Tao Of The Event Handler!

❖ 5 Methods Of DOM Fist!

❖ Lightning Script Style!

❖ The 36 Chambers Of Shaolin!

Page 10: The Mysteries Of JavaScript-Fu (@media SF Edition)

TRANSLATED...

❖ Working with events

❖ Working with DOM elements

❖ Optimisation

❖ Testing and debugging

Page 11: The Mysteries Of JavaScript-Fu (@media SF Edition)

THE TAO OF THE EVENT HANDLER

Page 12: The Mysteries Of JavaScript-Fu (@media SF Edition)

The essence of browser scripting is defining

behaviour

Page 13: The Mysteries Of JavaScript-Fu (@media SF Edition)

Big differences in both browser implementation

and opinion

Page 14: The Mysteries Of JavaScript-Fu (@media SF Edition)

The main battle has always been in one

area...

Page 15: The Mysteries Of JavaScript-Fu (@media SF Edition)

INLINE VS SCRIPTED

Page 16: The Mysteries Of JavaScript-Fu (@media SF Edition)

INLINE EVENT HANDLERS

Page 17: The Mysteries Of JavaScript-Fu (@media SF Edition)

INLINE EVENT HANDLERS

Applied as soon as the browser loads the HTML

Page 18: The Mysteries Of JavaScript-Fu (@media SF Edition)

INLINE EVENT HANDLERS

But what happens when there is more than one....

Page 19: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 20: The Mysteries Of JavaScript-Fu (@media SF Edition)

Bad JavaScript-fu

Page 21: The Mysteries Of JavaScript-Fu (@media SF Edition)

SCRIPT-BASED EVENT HANDLERS

Page 22: The Mysteries Of JavaScript-Fu (@media SF Edition)

Attached after element has loaded

Page 23: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 24: The Mysteries Of JavaScript-Fu (@media SF Edition)

Very DRY

Page 25: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 26: The Mysteries Of JavaScript-Fu (@media SF Edition)

Separate JavaScript out in a similar way to CSS

Page 27: The Mysteries Of JavaScript-Fu (@media SF Edition)

Large numbers of event handlers choke browsers

Page 28: The Mysteries Of JavaScript-Fu (@media SF Edition)

WHICH WAY?

❖ Use script-based event handling by default

❖ If the page is large and this method results in unresponsiveness try event delegation

❖ If all else fails go for inline event handling

Page 29: The Mysteries Of JavaScript-Fu (@media SF Edition)

EVENT BUBBLING

<a>

<p>

<div>

<body> handler

click

Page 30: The Mysteries Of JavaScript-Fu (@media SF Edition)

EVENT DELEGATION

Page 31: The Mysteries Of JavaScript-Fu (@media SF Edition)

BETTER INLINE HANDLERS

Page 32: The Mysteries Of JavaScript-Fu (@media SF Edition)

BETTER INLINE HANDLERS

Page 33: The Mysteries Of JavaScript-Fu (@media SF Edition)

5 METHODS OF DOM FIST

Page 34: The Mysteries Of JavaScript-Fu (@media SF Edition)

There are 5 methods for updating HTML

Page 35: The Mysteries Of JavaScript-Fu (@media SF Edition)

3 official methods (W3C)

Page 36: The Mysteries Of JavaScript-Fu (@media SF Edition)

$('kungfu').appendChild(node);

Page 37: The Mysteries Of JavaScript-Fu (@media SF Edition)

$('kungfu').insertBefore(node, child);

Page 38: The Mysteries Of JavaScript-Fu (@media SF Edition)

$('kungfu').replaceChild(node, child);

Page 39: The Mysteries Of JavaScript-Fu (@media SF Edition)

1 non-standard method (you guessed it, from IE)

Page 40: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 41: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 42: The Mysteries Of JavaScript-Fu (@media SF Edition)

DOM VS innerHTML

Page 43: The Mysteries Of JavaScript-Fu (@media SF Edition)

DOM METHODS

Page 44: The Mysteries Of JavaScript-Fu (@media SF Edition)

Insert elements with precision

Page 45: The Mysteries Of JavaScript-Fu (@media SF Edition)

But you need to create the nodes first...

Page 46: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 47: The Mysteries Of JavaScript-Fu (@media SF Edition)

ARGH!

Page 48: The Mysteries Of JavaScript-Fu (@media SF Edition)

LOWPRO’S DOM BUILDER

Page 49: The Mysteries Of JavaScript-Fu (@media SF Edition)

INNERHTML

Page 50: The Mysteries Of JavaScript-Fu (@media SF Edition)

Can shift large amount of HTML quickly...

Page 51: The Mysteries Of JavaScript-Fu (@media SF Edition)

...but you don't getmuch control

Page 52: The Mysteries Of JavaScript-Fu (@media SF Edition)

Incredibly simple to use with Ajax

Page 53: The Mysteries Of JavaScript-Fu (@media SF Edition)

WHICH WAY?

❖ No clear winner

❖ DOM is good for more surgical manipulation

❖ innerHTML is good for replacing large amounts of content or simple jobs

Page 54: The Mysteries Of JavaScript-Fu (@media SF Edition)

and the final method...

Page 55: The Mysteries Of JavaScript-Fu (@media SF Edition)

THE BASTARD SON

Page 56: The Mysteries Of JavaScript-Fu (@media SF Edition)

LIGHTNING SCRIPT STYLE

Page 57: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 58: The Mysteries Of JavaScript-Fu (@media SF Edition)

~134KB

Page 59: The Mysteries Of JavaScript-Fu (@media SF Edition)

5 HTTP requests

Page 60: The Mysteries Of JavaScript-Fu (@media SF Edition)

Takes time to download and evaluate script

Page 61: The Mysteries Of JavaScript-Fu (@media SF Edition)

The less JavaScript the better

Page 62: The Mysteries Of JavaScript-Fu (@media SF Edition)

Browsers normally only try to load 2 resources

concurrently

Page 63: The Mysteries Of JavaScript-Fu (@media SF Edition)

Combine .js files

Page 64: The Mysteries Of JavaScript-Fu (@media SF Edition)

Use GZIP compression not JS based minification

Page 65: The Mysteries Of JavaScript-Fu (@media SF Edition)

Make sure everything is cachable

Page 66: The Mysteries Of JavaScript-Fu (@media SF Edition)

FASTER LOOPS

Page 67: The Mysteries Of JavaScript-Fu (@media SF Edition)

FASTER LOOPS

Page 68: The Mysteries Of JavaScript-Fu (@media SF Edition)

BE CAREFUL WITH SELECTORS

Page 69: The Mysteries Of JavaScript-Fu (@media SF Edition)

THE 36 CHAMBERS OF SHAOLIN

Page 70: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 71: The Mysteries Of JavaScript-Fu (@media SF Edition)

You're going to needa few tools...

Page 72: The Mysteries Of JavaScript-Fu (@media SF Edition)

Buy a Mac

Page 73: The Mysteries Of JavaScript-Fu (@media SF Edition)

Parallels Workstation

PARALLELS WORKSTATION

Page 74: The Mysteries Of JavaScript-Fu (@media SF Edition)

Get Firebug

Page 75: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 76: The Mysteries Of JavaScript-Fu (@media SF Edition)

What about the other browsers?

Page 77: The Mysteries Of JavaScript-Fu (@media SF Edition)
Page 78: The Mysteries Of JavaScript-Fu (@media SF Edition)

And then there's testing...

Page 79: The Mysteries Of JavaScript-Fu (@media SF Edition)

SELENIUM

❖ Written by ThoughtWorks

❖ Implemented in HTML/CSS

❖ Test cases define a series of user actions (using HTML)

❖ Assertions check the correct results

Page 80: The Mysteries Of JavaScript-Fu (@media SF Edition)

LEARNING MORE

Page 81: The Mysteries Of JavaScript-Fu (@media SF Edition)

LEARNING MORE

❖ Dan Webb: http://www.danwebb.net

❖ Low Pro: http://www.danwebb.net/lowpro

❖ Parallels: http://parallels.com

❖ Firebug: http://getfirebug.com

❖ Selenium: http://www.openqa.org/selenium/

Page 82: The Mysteries Of JavaScript-Fu (@media SF Edition)

QUESTIONS?