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

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

Upload: danwrong

Post on 30-Nov-2014

21.365 views

Category:

Technology


1 download

DESCRIPTION

The Mysteries Of JavaScript-Fu presentation as presented at @media Europe in London

TRANSCRIPT

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

THE MYSTERIES OF JAVASCRIPT-FU

Dan Webb ([email protected])

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

A peasant’s language

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

Web 2.0 has forced ‘real’ programmers to

master it

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

JavaScript-Fu is not easy to master

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

The web is awash with bad examples and

worse resources

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

Developers forced into refuge behind libraries

and frameworks

Page 7: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 8: The Mysteries Of JavaScript-Fu (@media Europe 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 9: The Mysteries Of JavaScript-Fu (@media Europe Edition)

TRANSLATED...

❖ Working with events

❖ Working with DOM elements

❖ Optimisation

❖ Testing and debugging

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

THE TAO OF THE EVENT HANDLER

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

The essence of browser scripting is defining

behaviour

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

Big differences in both browser implementation

and opinion

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

The main battle has always been in one

area...

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

INLINE VS SCRIPTED

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

INLINE EVENT HANDLERS

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

INLINE EVENT HANDLERS

Applied as soon as the browser loads the HTML

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

INLINE EVENT HANDLERS

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

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

Bad JavaScript-fu

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

SCRIPT-BASED EVENT HANDLERS

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

Attached after element has loaded

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

Very DRY

Page 24: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 25: The Mysteries Of JavaScript-Fu (@media Europe Edition)

Separate JavaScript out in a similar way to CSS

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

Large numbers of event handlers choke browsers

Page 27: The Mysteries Of JavaScript-Fu (@media Europe 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 28: The Mysteries Of JavaScript-Fu (@media Europe Edition)

EVENT BUBBLING

<a>

<p>

<div>

<body> handler

click

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

EVENT DELEGATION

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

BETTER INLINE HANDLERS

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

BETTER INLINE HANDLERS

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

5 METHODS OF DOM FIST

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

There are 5 methods for updating HTML

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

3 official methods (W3C)

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

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

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

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

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

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

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

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

Page 39: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 40: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 41: The Mysteries Of JavaScript-Fu (@media Europe Edition)

DOM VS innerHTML

Page 42: The Mysteries Of JavaScript-Fu (@media Europe Edition)

DOM METHODS

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

Insert elements with precision

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

But you need to create the nodes first...

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

ARGH!

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

LOWPRO’S DOM BUILDER

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

INNERHTML

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

Can shift large amount of HTML quickly...

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

...but you don't getmuch control

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

Incredibly simple to use with Ajax

Page 52: The Mysteries Of JavaScript-Fu (@media Europe 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 53: The Mysteries Of JavaScript-Fu (@media Europe Edition)

and the final method...

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

THE BASTARD SON

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

LIGHTNING SCRIPT STYLE

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

~134KB

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

5 HTTP requests

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

Takes time to download and evaluate script

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

The less JavaScript the better

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

Browsers normally only try to load 2 resources

concurrently

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

Combine .js files

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

Use GZIP compression over JS based minification

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

Make sure everything is cachable

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

FASTER LOOPS

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

FASTER LOOPS

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

BE CAREFUL WITH SELECTORS

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

Use a just-in-time approach

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

THE 36 CHAMBERS OF SHAOLIN

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

You're going to needa few tools...

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

Buy a Mac

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

Parallels Workstation

PARALLELS WORKSTATION

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

Get Firebug

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

What about the other browsers?

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

And then there's testing...

Page 81: The Mysteries Of JavaScript-Fu (@media Europe 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 82: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 83: The Mysteries Of JavaScript-Fu (@media Europe Edition)
Page 84: The Mysteries Of JavaScript-Fu (@media Europe Edition)

LEARNING MORE

Page 85: The Mysteries Of JavaScript-Fu (@media Europe 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 86: The Mysteries Of JavaScript-Fu (@media Europe Edition)

QUESTIONS?