Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

80
10h40 - 11h30 - La Seine B Du JavaScript propre ? Challenge Accepted!

Transcript of Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Page 1: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

10h40 - 11h30 - La Seine B

Du JavaScript propre ? Challenge Accepted!

Page 2: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

27 au 29 mars 2013

Du JavaScript propre ? Challenge Accepted!

Julien Jakubowski OCTO Technology

@jak78

Romain Linsolas Société Générale

@romaintaz

Page 3: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Romain Linsolas

Développeur Java & Web Architecte Technique

@romaintaz

Page 4: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Julien Jakubowski

Développeur Java & Web depuis 10 ans

@jak78

Page 5: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Nous ne sommes pas…

Des gourous JavaScript

John Resig - jQuery

Douglas Crockford – JSLint, "JavaScript, The Good Parts"

Page 6: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Parlons de JavaScript entre Javaïstes

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

Page 7: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Nous allons aussi parler de…

Darth Vader Maroilles Bière

Page 8: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Pourquoi cette présentation ?

Page 9: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

En 2003

Page 10: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Le JavaScript est partout !

Runtime le plus distribué Mobilité Même côté serveur ( , …)

Page 11: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Les grands du web

Page 12: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Les grands du web

Page 13: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Nouveaux besoins

Les utilisateurs veulent des applications vivantes, réactives et dynamiques !

Enjeu de qualité Volume de code important

Fini de jouer !

Page 14: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

100,000 lignes de code JavaScript ?

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

Page 15: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Le JavaScript c'est SALE surprenant

Pourquoi ça fait peur ?

Page 16: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

WAT ? >  []  +  []    ""  >  []  +  {}    [object  Object]  >  {}  +  []    0  >  {}  +  {}    NaN  >  ++[[]][+[]]+[+[]]  ===  "10"    true  

Page 17: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

WAT???

Gary Bernhardt http://codemash.org https://www.destroyallsoftware.com/talks/wat

Page 18: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Darth Vader Maroilles Bière

Page 19: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Autre problème JavaScript

WAT???

Page 20: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Pollution de l'espace de nommage

Page 21: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Scope global par défaut

Page 22: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Tout est public par défaut

Page 23: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Darth Vader Maroilles Bière

Page 24: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Et ce n'est pas tout !

Le mot clé this (plus surprenant que sale) Ordre de déclaration de var Etc.

Page 25: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Mais le plus sale

Pollution de l'espace de nommage Tout est global par défaut Code non testé

Page 26: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Oui mais…

Page 27: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Page 28: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Nous allons aussi parler de…

Darth Vader Maroilles Bière

Page 29: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Comment coder proprement 100,000 lignes

en JavaScript ?

Page 30: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

On pourrait éviter le JavaScript…

Déléguer

• GWT • JSF • Vaadin • Etc.

Page 31: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

On peut aussi "améliorer" JavaScript

Langage web orienté objet pour combler les lacunes de JavaScript

Un JavaScript à l’écriture simplifiée

Page 32: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Exemple de CoffeeScript JavaScript

Page 33: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Architectures MV*

Page 34: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Architecture MVC classique

Client Serveur

Asynchrone

<html> + JS

Controller

View Model

Page 35: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Mes besoins aujourd'hui

Temps de réponse instantané Gestion de réseaux lents (mobiles…) Mode déconnecté

Page 36: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Architecture MV* en JavaScript

Client Serveur

View Controller

Model

Page 37: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Question implémentation

Frameworks optionnels, mais aident beaucoup Pas encore de standard

Page 38: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Modulariser

Page 39: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Qu'est-ce qu'un module ?

Représente un ensemble de code Isolation – faible couplage Présente une interface

Page 40: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique - Présentation

Page 41: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 42: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 43: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 44: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 45: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 46: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Un module basique

Page 47: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Espace de nommage

Page 48: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Diviser en plusieurs fichiers .js ?

Temps de chargement Pas de gestion des dépendances

Page 49: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

AMD, Asynchronous Module Definition

Définition de dépendances

jQuery

beers.js

Mustache

Page 50: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

AMD, Asynchronous Module Definition

Chargements parallèles, à la demande

jQuery Mustache beers.js sodas.js

jQuery beers.js

Mustache

Page 51: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Eviter les parties sales

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

Page 52: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

JsLint

Détection des ugly parts Equivalent à PMD / Checkstyle / FindBugs pour JS Intégration dans les IDE

Page 53: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Intégration dans Eclipse

Page 54: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Expressivité

http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801

Page 55: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Qu'est-ce qu'un code expressif ?

C'est un code simple, concis, lisible

Page 56: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Mauvais exemple

Pollution , mauvaise lisibilité => SALE

Page 57: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Avec

Pas de pollution Lisibilité accrue Code propre

Page 58: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

jQuery, c'est surtout : •  Lisibilité du code, expressivité •  Simplification de ce qui est utile : manipulation du DOM, Ajax…

Mais aussi : •  Structuration du code en plugins •  Nombreux plugins existants

Page 59: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Templates

Page 60: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

A la main

Page 61: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Avec template (Mustache.js)

Page 62: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Outils de templating

Mustache

Page 63: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Tests automatisés

Page 64: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Tests d'IHM

Conditions réelles Pas vraiment adapté au TDD

Selenium Windmill

Page 65: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

TDD pour JavaScript

En Java En JavaScript

TestNG

Page 66: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Tests avec Jasmine

Page 67: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Ecosystème

University « Le fantôme, le zombie et Testacular… »

Jean-Laurent De Morlhon et Pierre Gayvallet

Page 68: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

TDD en JavaScript

Page 69: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Faire du TDD pour JavaScript

Vous devez en faire en 2013 ! Vous n'avez plus d'excuses

Page 70: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Automatisation

Page 71: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Détecter et alerter

Quand un test échoue Quand une partie sale est utilisée S'il y a une erreur de syntaxe

Jasmine   JsLint   Google Closure Compiler

Intégration dans Maven, Jenkins ou Sonar

Page 72: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Intégration continue avec Jenkins

http://localhost:8080/job/Test%20Jasmine/1/consol

Page 73: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Analyse qualité avec Sonar

Page 74: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

D'autres outils utiles

Page 75: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

100,000 lignes de JavaScript ?

Modules MV* Parties sales évitées

Expressivité Automatisation Tests

Page 76: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Le monde des bisounours ?

Page 77: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Le monde des bisounours ? Oui mais non !

Intégration Pérennité Apprentissage

Page 78: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Businessman sitting at desk with feet up - Paul Bradbury

Page 79: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Références Eloquent JavaScript

http://eloquentjavascript.net/contents.html

JavaScript Garden

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

Learning Advanced JavaScript - J. Resig

http://ejohn.org/apps/learn/

JavaScript: the Good Parts - D. Crockford

Page 80: Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013

Questions ?

@jak78 @romaintaz