javascript ce n'est pas (si) sale

117
JavaScript, ce n’est pas (si) sale Julien Jakubowski Ch’ti JUG Document sous license Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 2.0 France (CC BY-NC-ND 2.0) - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/ mardi 25 septembre 2012

Upload: julien-jakubowski

Post on 17-Jan-2015

783 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Javascript ce n'est pas (si) sale

JavaScript, ce n’est pas (si) saleJulien Jakubowski

Ch’ti JUG

Document sous license Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 2.0 France (CC BY-NC-ND 2.0) - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/

mardi 25 septembre 2012

Page 2: Javascript ce n'est pas (si) sale

Qui suis-je ?Julien Jakubowski - @jak78

Développeur Java et web depuis ~10 ans

mardi 25 septembre 2012

Page 3: Javascript ce n'est pas (si) sale

Qui ne suis-je pas ?

Un véritable expert JavaScript ;-)

John Resig - jQuery

Douglas Crockford - JSLint, JavaScript the Good Parts

mardi 25 septembre 2012

Page 4: Javascript ce n'est pas (si) sale

On va parler de JavaScript entre Javaïstes

mardi 25 septembre 2012

Page 5: Javascript ce n'est pas (si) sale

On va parler de JavaScript entre Javaïstes

Java is to JavaScript as Ham is to Hamsterhttp://coding.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/

mardi 25 septembre 2012

Page 6: Javascript ce n'est pas (si) sale

On va aussi parler de :

Super-héros MaroillesBière

mardi 25 septembre 2012

Page 7: Javascript ce n'est pas (si) sale

Pourquoi cette présentation ?

mardi 25 septembre 2012

Page 8: Javascript ce n'est pas (si) sale

En 2003

mardi 25 septembre 2012

Page 9: Javascript ce n'est pas (si) sale

Maintenant...

mardi 25 septembre 2012

Page 10: Javascript ce n'est pas (si) sale

Et aussi...

mardi 25 septembre 2012

Page 11: Javascript ce n'est pas (si) sale

Forts enjeux

Volume de code important

Fini de jouer !

mardi 25 septembre 2012

Page 12: Javascript ce n'est pas (si) sale

100 000 lignes de code JavaScript ?

Young man hidden behind table - © 2011 Richard Hernández Arrondo

mardi 25 septembre 2012

Page 13: Javascript ce n'est pas (si) sale

Young man hidden behind table - © 2011 Richard Hernández Arrondo

mardi 25 septembre 2012

Page 14: Javascript ce n'est pas (si) sale

Pourquoi ?

mardi 25 septembre 2012

Page 15: Javascript ce n'est pas (si) sale

Parce que JavaScript,

surprenant

c’est SALE

mardi 25 septembre 2012

Page 16: Javascript ce n'est pas (si) sale

c’est surprenant

Parce que JavaScript,

surprenantmardi 25 septembre 2012

Page 18: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 20: Javascript ce n'est pas (si) sale

Super-héros MaroillesBière√

mardi 25 septembre 2012

Page 21: Javascript ce n'est pas (si) sale

Conversion de types

mardi 25 septembre 2012

Page 22: Javascript ce n'est pas (si) sale

Conversion de types

WAT???

mardi 25 septembre 2012

Page 23: Javascript ce n'est pas (si) sale

Conversion de types

mardi 25 septembre 2012

Page 24: Javascript ce n'est pas (si) sale

La solution ?

mardi 25 septembre 2012

Page 25: Javascript ce n'est pas (si) sale

Super-héros MaroillesBière√ √

mardi 25 septembre 2012

Page 26: Javascript ce n'est pas (si) sale

Pollution de l’espacede nommage

mardi 25 septembre 2012

Page 27: Javascript ce n'est pas (si) sale

Pollution de l’espacede nommage

mardi 25 septembre 2012

Page 28: Javascript ce n'est pas (si) sale

Pollution de l’espacede nommage

mardi 25 septembre 2012

Page 29: Javascript ce n'est pas (si) sale

Global par défaut

mardi 25 septembre 2012

Page 30: Javascript ce n'est pas (si) sale

Global par défaut

mardi 25 septembre 2012

Page 31: Javascript ce n'est pas (si) sale

Global par défaut

mardi 25 septembre 2012

Page 32: Javascript ce n'est pas (si) sale

Global par défaut

mardi 25 septembre 2012

Page 33: Javascript ce n'est pas (si) sale

Global par défaut

mardi 25 septembre 2012

Page 34: Javascript ce n'est pas (si) sale

Tout est « public » par défaut

mardi 25 septembre 2012

Page 35: Javascript ce n'est pas (si) sale

Tout est « public » par défaut

mardi 25 septembre 2012

Page 36: Javascript ce n'est pas (si) sale

// Attendu :1{ degre: '8%'}

mardi 25 septembre 2012

Page 37: Javascript ce n'est pas (si) sale

// Attendu :1{ degre: '8%'}

// Obtenu :-1undefined

mardi 25 septembre 2012

Page 38: Javascript ce n'est pas (si) sale

Automatic semi-column insertion// Attendu :1{ degre: '8%'}

// Obtenu :-1undefined

mardi 25 septembre 2012

Page 39: Javascript ce n'est pas (si) sale

Et il en reste...

Le mot-clé this (plutôt surprenant que sale)

eval

ordre de déclaration du mot-clé var

...

mardi 25 septembre 2012

Page 40: Javascript ce n'est pas (si) sale

Le plus sale :

Pollution de l’espace de nommage

Tout global par défaut

Insertion automatique de points-virgule

mardi 25 septembre 2012

Page 41: Javascript ce n'est pas (si) sale

Oui, mais...

mardi 25 septembre 2012

Page 42: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 43: Javascript ce n'est pas (si) sale

Super-héros MaroillesBière√ √ √

mardi 25 septembre 2012

Page 44: Javascript ce n'est pas (si) sale

Comment coder 100 000 lignes de code en JavaScript

d’une façon pas si sale ?

mardi 25 septembre 2012

Page 45: Javascript ce n'est pas (si) sale

Eviter JavaScript

GWT

CoffeeScript

DART

mardi 25 septembre 2012

Page 46: Javascript ce n'est pas (si) sale

Modulariser

http://www.gettyimages.fr/detail/photo/black-and-white-jigsaw-pieces-form-a-square-photo/100479289mardi 25 septembre 2012

Page 47: Javascript ce n'est pas (si) sale

Qu’est-ce qu’un module ?

mardi 25 septembre 2012

Page 48: Javascript ce n'est pas (si) sale

Qu’est-ce qu’un module ?

• Ensemble de code

mardi 25 septembre 2012

Page 49: Javascript ce n'est pas (si) sale

Qu’est-ce qu’un module ?

• Ensemble de code

• Présente une interface

mardi 25 septembre 2012

Page 50: Javascript ce n'est pas (si) sale

Qu’est-ce qu’un module ?

• Ensemble de code

• Présente une interface

• Masque ses détails d’implémentation

mardi 25 septembre 2012

Page 51: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 52: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 53: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 54: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 55: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 56: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 57: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 58: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 59: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 60: Javascript ce n'est pas (si) sale

Architecturer son code

http://www.gettyimages.fr/detail/illustration/forklift-building-a-cube-with-smaller-illustration-libre-de-droits/109424118mardi 25 septembre 2012

Page 61: Javascript ce n'est pas (si) sale

Diviser 100 000 lignes de code en plusieurs fichiers

Temps de chargement Dépendances

mardi 25 septembre 2012

Page 62: Javascript ce n'est pas (si) sale

Diviser 100 000 lignes de code en plusieurs fichiers

Temps de chargement Dépendances

mardi 25 septembre 2012

Page 63: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

mardi 25 septembre 2012

Page 64: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

√ Découper mes 100 000 lignes en sous-modules

mardi 25 septembre 2012

Page 65: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

√ Découper mes 100 000 lignes en sous-modules

√ Chaque module est dans son scope isolé

mardi 25 septembre 2012

Page 66: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

√ Découper mes 100 000 lignes en sous-modules

√ Chaque module est dans son scope isolé

√ Chargement asynchrone et à la demande

mardi 25 septembre 2012

Page 67: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

√ Découper mes 100 000 lignes en sous-modules

√ Chaque module est dans son scope isolé

√ Chargement asynchrone et à la demande

X Ordre du chargement et asynchronisme

mardi 25 septembre 2012

Page 68: Javascript ce n'est pas (si) sale

AMDRequireJS, Curl...

√ Découper mes 100 000 lignes en sous-modules

√ Chaque module est dans son scope isolé

√ Chargement asynchrone et à la demande

X Ordre du chargement et asynchronisme

X Intégration avec librairies tierces

mardi 25 septembre 2012

Page 69: Javascript ce n'est pas (si) sale

Backbone.jsSorte de SpringMVC / JSF

mardi 25 septembre 2012

Page 70: Javascript ce n'est pas (si) sale

Backbone.jsSorte de SpringMVC / JSF

√ Structure votre code en MVC / MVP

mardi 25 septembre 2012

Page 71: Javascript ce n'est pas (si) sale

Backbone.jsSorte de SpringMVC / JSF

√ Structure votre code en MVC / MVP

√ Maintenabilité d’applications de taille non-triviale

mardi 25 septembre 2012

Page 72: Javascript ce n'est pas (si) sale

Backbone.jsSorte de SpringMVC / JSF

√ Structure votre code en MVC / MVP

√ Maintenabilité d’applications de taille non-triviale

X Coût d’entrée

mardi 25 septembre 2012

Page 73: Javascript ce n'est pas (si) sale

Backbone.jsSorte de SpringMVC / JSF

√ Structure votre code en MVC / MVP

√ Maintenabilité d’applications de taille non-triviale

X Coût d’entrée

X Maturité, pas de standards (AngularJS...)

mardi 25 septembre 2012

Page 74: Javascript ce n'est pas (si) sale

Tests automatisés

http://www.flickr.com/photos/horiavarlan/4747872021/sizes/l/in/photostream/mardi 25 septembre 2012

Page 75: Javascript ce n'est pas (si) sale

Tests d’IHM

Robotisent un navigateur qui attaque votre application

Selenium Windmill

mardi 25 septembre 2012

Page 76: Javascript ce n'est pas (si) sale

Tests unitaires

TestNG

mardi 25 septembre 2012

Page 77: Javascript ce n'est pas (si) sale

Tests unitaires

TestNG

Jasmine QUnit

mardi 25 septembre 2012

Page 78: Javascript ce n'est pas (si) sale

Démo

mardi 25 septembre 2012

Page 79: Javascript ce n'est pas (si) sale

Démo

Jasmine

mardi 25 septembre 2012

Page 80: Javascript ce n'est pas (si) sale

Eviter les parties sales

http://www.gettyimages.fr/detail/photo/hands-of-a-blacksmith-in-his-studio-image-libre-de-droits/109889293mardi 25 septembre 2012

Page 81: Javascript ce n'est pas (si) sale

JsLint

Trouve les utilisations d’ugly parts

Sorte de CheckStyle / PMD / FindBugs

S’intègre à Eclipse

mardi 25 septembre 2012

Page 82: Javascript ce n'est pas (si) sale

Eclipse seul

mardi 25 septembre 2012

Page 83: Javascript ce n'est pas (si) sale

Eclipse avec JsLint

mardi 25 septembre 2012

Page 85: Javascript ce n'est pas (si) sale

Un code expressif ?

•Simple

•Concis

•Lisible

mardi 25 septembre 2012

Page 86: Javascript ce n'est pas (si) sale

mardi 25 septembre 2012

Page 87: Javascript ce n'est pas (si) sale

Pollution

mardi 25 septembre 2012

Page 88: Javascript ce n'est pas (si) sale

Pollution Peu lisible

mardi 25 septembre 2012

Page 89: Javascript ce n'est pas (si) sale

Pollution Peu lisible SALE !

mardi 25 septembre 2012

Page 90: Javascript ce n'est pas (si) sale

Avec

mardi 25 septembre 2012

Page 91: Javascript ce n'est pas (si) sale

Pas de pollution

Avec

mardi 25 septembre 2012

Page 92: Javascript ce n'est pas (si) sale

Pas de pollution Concision, lisibilité

Avec

mardi 25 septembre 2012

Page 93: Javascript ce n'est pas (si) sale

Pas de pollution Concision, lisibilité Propre

Avec

mardi 25 septembre 2012

Page 94: Javascript ce n'est pas (si) sale

• Lisibilité du code - expressivité

• Simplifie ce qu’on utilise le plus fréquemment : AJAX, manipulation du DOM...

C’est surtout...

mardi 25 septembre 2012

Page 95: Javascript ce n'est pas (si) sale

• Nombreux plugins tiers

• Structurer son application en plugins

• Incoutournable !

C’est aussi...

mardi 25 septembre 2012

Page 96: Javascript ce n'est pas (si) sale

Mustache

{

mardi 25 septembre 2012

Page 97: Javascript ce n'est pas (si) sale

Sans Mustache{

mardi 25 septembre 2012

Page 98: Javascript ce n'est pas (si) sale

Avec Mustache{

mardi 25 septembre 2012

Page 99: Javascript ce n'est pas (si) sale

Templating JavaScript

Rendu HTML de façon lisible

Mustache

{

mardi 25 septembre 2012

Page 100: Javascript ce n'est pas (si) sale

A des concurrents (affaire de goûts...)

Avantage: existe aussi en Java !

➔ Même moteur côté client et serveur

Mustache

{

mardi 25 septembre 2012

Page 101: Javascript ce n'est pas (si) sale

Contrôle qualité automatisé

Build et intégration continue

mardi 25 septembre 2012

Page 102: Javascript ce n'est pas (si) sale

Je veux être alerté si :

• Test en échec

• Partie sale utilisée

• Erreur de syntaxe

mardi 25 septembre 2012

Page 103: Javascript ce n'est pas (si) sale

Je veux être alerté si :

• Test en échec

• Partie sale utilisée

• Erreur de syntaxe

Jasmine

JsLint

Google Closure Compiler

mardi 25 septembre 2012

Page 104: Javascript ce n'est pas (si) sale

Je veux être alerté si :

• Test en échec

• Partie sale utilisée

• Erreur de syntaxe

Jasmine

JsLint

Google Closure Compiler

S’intègrent à Maven, Jenkins, Sonar

mardi 25 septembre 2012

Page 105: Javascript ce n'est pas (si) sale

Compiler du JavaScript ?

mardi 25 septembre 2012

Page 106: Javascript ce n'est pas (si) sale

Compiler du JavaScript ?

JavaScript est un langage interprété

mardi 25 septembre 2012

Page 107: Javascript ce n'est pas (si) sale

Compiler du JavaScript ?

JavaScript est un langage interprété

Apports de la « compilation » :

mardi 25 septembre 2012

Page 108: Javascript ce n'est pas (si) sale

Compiler du JavaScript ?

JavaScript est un langage interprété

Apports de la « compilation » :

• Vérification de la syntaxe

mardi 25 septembre 2012

Page 109: Javascript ce n'est pas (si) sale

Compiler du JavaScript ?

JavaScript est un langage interprété

Apports de la « compilation » :

• Vérification de la syntaxe

• Code optimisé

mardi 25 septembre 2012

Page 110: Javascript ce n'est pas (si) sale

100 000 lignes de code JavaScript: comment ?

Modules Architecture Tests unitaires

Parties sales évitées

Expressivité Contrôle qualité automatisé

mardi 25 septembre 2012

Page 111: Javascript ce n'est pas (si) sale

Et depuis...

Businessman sitting at desk with feet up - Paul Bradbury

mardi 25 septembre 2012

Page 112: Javascript ce n'est pas (si) sale

Références

mardi 25 septembre 2012

Page 113: Javascript ce n'est pas (si) sale

RéférencesEloquent JavaScript

http://eloquentjavascript.net/contents.html

mardi 25 septembre 2012

Page 114: Javascript ce n'est pas (si) sale

Références

JavaScript Gardenhttp://bonsaiden.github.com/JavaScript-Garden/

Eloquent JavaScripthttp://eloquentjavascript.net/contents.html

mardi 25 septembre 2012

Page 115: Javascript ce n'est pas (si) sale

Références

JavaScript Gardenhttp://bonsaiden.github.com/JavaScript-Garden/

Eloquent JavaScripthttp://eloquentjavascript.net/contents.html

Learning Advanced JavaScript - J. Resighttp://ejohn.org/apps/learn/

mardi 25 septembre 2012

Page 116: Javascript ce n'est pas (si) sale

Références

JavaScript Gardenhttp://bonsaiden.github.com/JavaScript-Garden/

Eloquent JavaScripthttp://eloquentjavascript.net/contents.html

JavaScript: the Good Parts - D. Crockford

Learning Advanced JavaScript - J. Resighttp://ejohn.org/apps/learn/

mardi 25 septembre 2012

Page 117: Javascript ce n'est pas (si) sale

ROTI

http://www.flickr.com/photos/34943981@N00/202923614/

mardi 25 septembre 2012