Efficient JavaScript Development

52
Efficient JavaScript Development tools, strategies, tips and tricks Wolfram Kriesing, uxebu [email protected] http://twitter.com/uxebu

description

The slides that belong to the talk I gave at the Ajax in Action 2008.

Transcript of Efficient JavaScript Development

Page 1: Efficient JavaScript Development

Efficient JavaScript Developmenttools, strategies, tips and tricks

Wolfram Kriesing, [email protected]

http://twitter.com/uxebu

Page 2: Efficient JavaScript Development

Efficient what

• efficient code

• writing code

• fixing code

• optimizing code

?

Page 3: Efficient JavaScript Development

Efficient that

• efficient code

• writing code

• fixing code

• optimizing code

!

Page 4: Efficient JavaScript Development

Efficient how?

• in the team - NS, docs, CS, ..

• fixing code - debugger, firebug

Erklären WO Effizienz zum Tragen kommt!

Page 5: Efficient JavaScript Development

Where do I start?

Page 6: Efficient JavaScript Development

Use Namespaces!

• globals suck

• objects as namespace

• easy mapping

• directory structure comes by itself

Page 7: Efficient JavaScript Development

Use Namespaces!shop.page.cart.getItems() javascript

http://shop.de/api/cart/items/ URL

(r'^cart/items/$', views.cart.get_items), mapper

def get_items(request): item_ids = request.POST.list("ids")

code

Page 8: Efficient JavaScript Development

Patterns

• solve your problem

• solve it again

• copy+paste•

• you got a pattern

• abstract it

• reuse the pattern

AJAX

Page 9: Efficient JavaScript Development

Let's code together!

Page 10: Efficient JavaScript Development

for (var i=0; i<s.length; i++)if (i%2) node.innerHTML = „is even“else node.innerHTML = „is odd“;

for (var i=0, len=s.length; i<len; i++){ if (i%2){ node.innerHTML = „is even“; } else { node.innerHTML = „is odd“; }}

for (var i=0; i<s.length; i++) if (i%2==0) node.innerHTML = „is even“; else node.innerHTML = „is odd“;

for (var i=0; i<s.length; i++) node.innerHTML = i%2 ? „is even“ : „is odd“;

Page 11: Efficient JavaScript Development

Coding Style, etc.

• less to think

• all code looks the same

• do code, don‘t style

• stay focused

Page 12: Efficient JavaScript Development

But!

Page 13: Efficient JavaScript Development

d.declare(obj, null, {func1:function(){}

});

var obj = {};obj.func1 = function(){}

var obj = new Object();Object.prototype.func1 = function(){}

var obj = new function(){ arguments.callee.prototype.func1 = function(){}}

Page 14: Efficient JavaScript Development

Docs and Tests?

Page 15: Efficient JavaScript Development

DocTests

• tests

• docs

Page 16: Efficient JavaScript Development

Coding JavaScript sucks!?

Page 17: Efficient JavaScript Development

Not anymore!

Page 18: Efficient JavaScript Development

And every day less!

Page 19: Efficient JavaScript Development

Useful Editors

• komodo

• aptana

• eclipse

• netbeans

• many others ...

Page 20: Efficient JavaScript Development

Customize your Editor

• keyboard shortcuts

• folding, bookmarking

• make your editor do what you want!

Page 21: Efficient JavaScript Development

Code Folding

Page 22: Efficient JavaScript Development

Template

Page 23: Efficient JavaScript Development

Templates

• faster

• no typos

• for the whole team

• docs built in

• copy with pride

Page 24: Efficient JavaScript Development

Comment out

Page 25: Efficient JavaScript Development

Macros

Page 26: Efficient JavaScript Development

Code Analyzer

• syntax coloring

• knows API of your library

• understands your code

• links code (dive in)

• auto completion

• JSLint built in

Page 27: Efficient JavaScript Development

JSLint• finds IE traps (trailing comma)

• gives JS insight (parseInt, ===, ...)

• understand type coercion

• finds missing var statements

• undefined vars, typos (myVar vs. myvar)

http://jslint.comhttp://wolfram.kriesing.de/blog/index.php/2007/understanding-jslint-output

http://www.danhulton.com/blog/2008/01/16/integrate-js-lint-into-komodo-edit/

Page 28: Efficient JavaScript Development

Try it first (1)d.query("h2") .style({color:"red"}) .anim({left:300}, 500)

Are you sure this works?

d.query("h2") .style({position:"absolute", color:"red"}) .anim({left:300}, 500)

NO

save one reload!

Page 29: Efficient JavaScript Development

Try it first (2)

• try the code in FireBug first

• learn more about your library

• play with the code

• find better ways?

Page 30: Efficient JavaScript Development

CSS + JS!?

Page 31: Efficient JavaScript Development

Inspect and Fix

• fix the DOM

• fix the CSS

• see inheritance chains

• validate before trying

Page 32: Efficient JavaScript Development

ReCSS

• bookmarklet

• reload your CSS

• no ctrl+r

• stay in context

http://turtle.dojotoolkit.org/~david/recss.html

Page 33: Efficient JavaScript Development

Hands on

Page 34: Efficient JavaScript Development

In Browser

• firebug

• IE8 dev tool bar

• webkit drosera

• opera dragonfly

• chrome tools

Page 35: Efficient JavaScript Development

Firebug

• has keyboard shortcuts!ctrl+a, ctrl+e, up, down, tab, shift+tab, but not ctrl+r

• console.log("See this %s", var, obj, array)

• monitorEvents($("id"))

http://getfirebug.com/console.htmlhttp://getfirebug.com/commandline.html

http://getfirebug.com/keyboard.html

Page 36: Efficient JavaScript Development

JS in Browser

Page 37: Efficient JavaScript Development

alert, console.log

• alert hell? use confirm!

• numbered console.log

Page 38: Efficient JavaScript Development

Inspect the data

Page 39: Efficient JavaScript Development

*.toJson()

Page 40: Efficient JavaScript Development

*.toString()

Page 41: Efficient JavaScript Development

*.toString()

• function source

• function parameters

• even console.log.toString()

Page 42: Efficient JavaScript Development

Fix in Place

Page 44: Efficient JavaScript Development

Stacktrace

• new Error().stack

• arguments.callee

• getStackTrace()

• console.trace()?

http://eriwen.com/javascript/js-stack-trace/

Page 45: Efficient JavaScript Development

Debuggers• FireBug (Firefox)

• IE8, developer tool bar

• Drosera (Webkit)

• Visual Studio Express (IE7 pur)

• pi.debugger, FireBug Lite, ....

• Venkman

• Microsoft Script Debugger (IE6)

• Eclipse, Netbeans, ...

Page 46: Efficient JavaScript Development

IE8

Page 47: Efficient JavaScript Development

debugger;

• programatic breakpoint

• set on the fly

Page 48: Efficient JavaScript Development

debugger;

Page 49: Efficient JavaScript Development

Watch the Traffic

• Charles

• HTTP Live Headers

• Fiddler

• etc.

Page 50: Efficient JavaScript Development

Ajax Requests

• FireBug reveals it all

• watch out with XD requests

Page 51: Efficient JavaScript Development

Other sources

• google your problem

• talk to a colleague

• sleep over it