SlideShare una empresa de Scribd logo
1 de 77
Du JavaScript propre ?
Challenge Accepted!

Julien Jakubowski
OCTO Technology

@jak78

Romain Linsolas
Société Générale

@romaintaz
27 au 29 mars 2013
Romain Linsolas
Développeur Java & Web
Architecte Technique

@romaintaz
Julien Jakubowski
Développeur Java & Web depuis 11 ans
@jak78
Nous ne sommes pas…
Des gourous JavaScript
John Resig - jQuery

Douglas Crockford – JSLint,
"JavaScript, The Good Parts"
JavaScript et Java ?

http://www.flickr.com/photos/naturesauraphotography/	


http://commons.wikimedia.org/wiki/User:DocteurCosmos	


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

Darth Vader

Bière

Maroilles
Pourquoi cette présentation ?
En 2003
Le JavaScript est partout !

Runtime le plus distribué
Navigateurs desktop, mobile…
Même côté serveur (
, …)
Les géants du web
Les géants du web
Nouveaux besoins
Les utilisateurs veulent des applications vivantes, réactives et
dynamiques !
Enjeu de qualité
Volume de code important

 Fini de jouer !
100,000 lignes de code JavaScript ?

Young man hidden behind table - © 2011 Richard Hernández Arrondo
Pourquoi ça fait peur ?

Le JavaScript
c'est SALE
surprenant
WAT ?
>	
  []	
  +	
  []	
  
	
  ""	
  
>	
  []	
  +	
  {}	
  
	
  [object	
  Object]	
  
>	
  {}	
  +	
  []	
  
	
  0	
  
>	
  {}	
  +	
  {}	
  
	
  NaN	
  
>	
  ++[[]][+[]]+[+[]]	
  ===	
  "10"	
  
	
  true	
  
??
T?
WA
Gary Bernhardt
http://codemash.org
https://www.destroyallsoftware.com/talks/wat
Darth Vader

Bière

Maroilles
Autre problème JavaScript

???
AT
W
Pollution de l'espace de nommage
Scope global par défaut
Tout est public par défaut
Darth Vader

Bière

Maroilles
Et ce n'est pas tout !

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

Pollution de l'espace de nommage
Tout est global par défaut
Code non testé
Oui mais…
Author : Frédérique Voisin-Demery http://www.flickr.com/people/8514720@N04
Nous allons aussi parler de…

Darth Vader

Bière

Maroilles
Comment coder
proprement 100,000 lignes
en JavaScript ?
On pourrait éviter le JavaScript…
Déléguer
• GWT
• JSF
• Vaadin
• Etc.
On pourrait utiliser un « JavaScript amélioré »

Langage web orienté objet
« Ce que JavaScript serait s’il avait été
inventé aujourd’hui »

Un JavaScript moins verbeux
Sucre syntaxique
Exemple de CoffeeScript
JavaScript
Architectures MV*

http://www.gettyimages.fr/detail/illustration/forklift-building-a-cube-with-smaller-illustration-libre-de-droits/109424118
Architecture MVC classique
<html>
+
JS

Client
Serveur
Controller 	


Model	


View
Mes besoins aujourd'hui

Temps de réponse instantané
Gestion de réseaux lents (mobiles…)
Mode déconnecté
Architecture MV* en JavaScript
View	


Controller	


Model	

Client
Serveur
…
Question implémentation

Frameworks optionnels, mais aident beaucoup
Pas encore de standard
Modulariser

http://www.gettyimages.fr/detail/photo/black-and-white-jigsaw-pieces-form-a-square-photo/100479289
Qu'est-ce qu'un module ?

Représente un ensemble de code
Isolation – faible couplage
Présente une interface
Un module basique - Présentation
Un module basique
Un module basique
Un module basique
Un module basique
Un module basique
Un module basique
Espace de nommage
Diviser en plusieurs fichiers .js ?

Temps de chargement
Pas de gestion des dépendances
AMD, Asynchronous Module Definition
Définition de dépendances

jQuery	

beers.js	

Mustache
AMD, Asynchronous Module Definition
Chargements parallèles, à la demande

jQuery	

 Mustache	

 beers.js	

 sodas.js	


jQuery	

Mustache	


beers.js
Eviter les parties sales

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

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

http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801
Qu'est-ce qu'un code expressif ?

C'est un code simple,
concis,
lisible
Mauvais exemple

Pollution, mauvaise lisibilité => SALE
Avec

Pas de pollution
Lisibilité accrue
Code propre
Templates
A la main
Avec template (Mustache.js)
Outils de templating

Mustache
Tests automatisés

http://www.flickr.com/photos/horiavarlan/4747872021/sizes/l/in/photostream/
Tests d'IHM

Selenium
Conditions réalistes
Lent, fragile
TDD pour JavaScript
En Java

TestNG

En JavaScript
Tests avec Jasmine
Ecosystème

Devoxx FR 2013 University « Le fantôme, le zombie et Testacular… »
Jean-Laurent De Morlhon et Pierre Gayvallet
TDD en JavaScript
Automatisation
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 SonarQube
Intégration continue avec Jenkins

http://localhost:8080/job/Test%20Jasmine/1/consol
Analyse qualité avec Sonar
D'autres outils utiles
100,000 lignes de JavaScript ?

MV*

Modules

Parties sales
évitées

Expressivité

Tests

Automatisation
Le monde des bisounours ?
Le monde des bisounours ? Oui mais non !

Intégration
Pérennité
Apprentissage
Businessman sitting at desk with feet up - Paul Bradbury
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
Questions ?

@jak78

@romaintaz

Más contenido relacionado

La actualidad más candente

Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitée
Ouadie LAHDIOUI
 

La actualidad más candente (15)

OCTO 2013 : gérez vos apps, pas vos devices
OCTO 2013 : gérez vos apps, pas vos devicesOCTO 2013 : gérez vos apps, pas vos devices
OCTO 2013 : gérez vos apps, pas vos devices
 
Tech days 2012 mvvm de a à z
Tech days 2012   mvvm de a à zTech days 2012   mvvm de a à z
Tech days 2012 mvvm de a à z
 
Agile Sans Frontières
Agile Sans FrontièresAgile Sans Frontières
Agile Sans Frontières
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
 
Hello AngularJS - Back to the future
Hello AngularJS - Back to the futureHello AngularJS - Back to the future
Hello AngularJS - Back to the future
 
Jquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter BootstrapJquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter Bootstrap
 
React xp
React xpReact xp
React xp
 
jQuery mobile vs Twitter bootstrap
jQuery mobile vs Twitter bootstrapjQuery mobile vs Twitter bootstrap
jQuery mobile vs Twitter bootstrap
 
EcmaScript
EcmaScriptEcmaScript
EcmaScript
 
Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitée
 
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
 
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
 
Améliorer votre productivité XAML en entreprise !
Améliorer votre productivité XAML en entreprise !Améliorer votre productivité XAML en entreprise !
Améliorer votre productivité XAML en entreprise !
 
Une application sans framework en 2019
Une application sans framework en 2019Une application sans framework en 2019
Une application sans framework en 2019
 
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
 

Destacado

China shangai.pps
China shangai.ppsChina shangai.pps
China shangai.pps
Julio Cesar
 
A cristo crucificado_peman
A cristo crucificado_pemanA cristo crucificado_peman
A cristo crucificado_peman
Micaela Luque
 
Museum congres 2010 artours
Museum congres 2010 artoursMuseum congres 2010 artours
Museum congres 2010 artours
Fabrique
 
Présentation de Corporation avril 2012
Présentation de Corporation avril 2012Présentation de Corporation avril 2012
Présentation de Corporation avril 2012
QMX Gold Corporation
 
Opencloud, Jean-Pierre Laisne - CompatibleOne
Opencloud, Jean-Pierre Laisne - CompatibleOneOpencloud, Jean-Pierre Laisne - CompatibleOne
Opencloud, Jean-Pierre Laisne - CompatibleOne
CompatibleOne
 
Catalogue home made FR
Catalogue home made FRCatalogue home made FR
Catalogue home made FR
HomeMade
 
Ballena o sirena
Ballena o sirenaBallena o sirena
Ballena o sirena
jedat
 

Destacado (20)

Diane La Moda A Milano
Diane La Moda A MilanoDiane La Moda A Milano
Diane La Moda A Milano
 
China shangai.pps
China shangai.ppsChina shangai.pps
China shangai.pps
 
VTÉ Café : tablettes tactiles en classe
VTÉ Café : tablettes tactiles en classeVTÉ Café : tablettes tactiles en classe
VTÉ Café : tablettes tactiles en classe
 
A cristo crucificado_peman
A cristo crucificado_pemanA cristo crucificado_peman
A cristo crucificado_peman
 
Museum congres 2010 artours
Museum congres 2010 artoursMuseum congres 2010 artours
Museum congres 2010 artours
 
Club de lectura
Club de lecturaClub de lectura
Club de lectura
 
W ord informatica
W ord informaticaW ord informatica
W ord informatica
 
Présentation de Corporation avril 2012
Présentation de Corporation avril 2012Présentation de Corporation avril 2012
Présentation de Corporation avril 2012
 
STH - Atelier Ouest Landais - 05/10/09
STH - Atelier Ouest Landais - 05/10/09STH - Atelier Ouest Landais - 05/10/09
STH - Atelier Ouest Landais - 05/10/09
 
Opencloud, Jean-Pierre Laisne - CompatibleOne
Opencloud, Jean-Pierre Laisne - CompatibleOneOpencloud, Jean-Pierre Laisne - CompatibleOne
Opencloud, Jean-Pierre Laisne - CompatibleOne
 
Actividad 1
Actividad 1Actividad 1
Actividad 1
 
Google docs
Google docsGoogle docs
Google docs
 
Medicina Prepaga Y Obras Sociales 2011
Medicina Prepaga Y Obras Sociales 2011Medicina Prepaga Y Obras Sociales 2011
Medicina Prepaga Y Obras Sociales 2011
 
AïDa Le Rive Del Benaco
AïDa Le Rive Del BenacoAïDa Le Rive Del Benaco
AïDa Le Rive Del Benaco
 
Artes Rupestre
Artes RupestreArtes Rupestre
Artes Rupestre
 
Dossier presse "Bribes de vie"
Dossier presse "Bribes de vie"Dossier presse "Bribes de vie"
Dossier presse "Bribes de vie"
 
Catalogue home made FR
Catalogue home made FRCatalogue home made FR
Catalogue home made FR
 
Contenido laboral del Reglamento de Extranjería. Barcelona,ICAB, 19.5.201111.
Contenido laboral del Reglamento de Extranjería. Barcelona,ICAB, 19.5.201111.Contenido laboral del Reglamento de Extranjería. Barcelona,ICAB, 19.5.201111.
Contenido laboral del Reglamento de Extranjería. Barcelona,ICAB, 19.5.201111.
 
Ballena o sirena
Ballena o sirenaBallena o sirena
Ballena o sirena
 
Chemin de Careme
Chemin de CaremeChemin de Careme
Chemin de Careme
 

Similar a Softshake 2013 - Du JavaScript propre ? Challenge accepted!

Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Julien Jakubowski
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
Romain Linsolas
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
Cyrille Le Clerc
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JS
Noirdes
 

Similar a Softshake 2013 - Du JavaScript propre ? Challenge accepted! (20)

Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)
 
jQuery vs AngularJS
jQuery vs AngularJS jQuery vs AngularJS
jQuery vs AngularJS
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications Web
 
Créer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopCréer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShop
 
Performances Web Mobile
Performances Web MobilePerformances Web Mobile
Performances Web Mobile
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JS
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
DMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natifDMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natif
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
 
Une introduction à Javascript
Une introduction à JavascriptUne introduction à Javascript
Une introduction à Javascript
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
 

Más de OCTO Technology

Más de OCTO Technology (20)

Le Comptoir OCTO - Se conformer à la CSRD : un levier d'action insoupçonné
Le Comptoir OCTO - Se conformer à la CSRD : un levier d'action insoupçonnéLe Comptoir OCTO - Se conformer à la CSRD : un levier d'action insoupçonné
Le Comptoir OCTO - Se conformer à la CSRD : un levier d'action insoupçonné
 
Le Comptoir OCTO - MLOps : Les patterns MLOps dans le cloud
Le Comptoir OCTO - MLOps : Les patterns MLOps dans le cloudLe Comptoir OCTO - MLOps : Les patterns MLOps dans le cloud
Le Comptoir OCTO - MLOps : Les patterns MLOps dans le cloud
 
La Grosse Conf 2024 - Philippe Stepniewski -Atelier - Live coding d'une base ...
La Grosse Conf 2024 - Philippe Stepniewski -Atelier - Live coding d'une base ...La Grosse Conf 2024 - Philippe Stepniewski -Atelier - Live coding d'une base ...
La Grosse Conf 2024 - Philippe Stepniewski -Atelier - Live coding d'une base ...
 
La Grosse Conf 2024 - Philippe Prados - Atelier - RAG : au-delà de la démonst...
La Grosse Conf 2024 - Philippe Prados - Atelier - RAG : au-delà de la démonst...La Grosse Conf 2024 - Philippe Prados - Atelier - RAG : au-delà de la démonst...
La Grosse Conf 2024 - Philippe Prados - Atelier - RAG : au-delà de la démonst...
 
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
Le Comptoir OCTO - Maîtriser le RAG : connecter les modèles d’IA génératives ...
 
OCTO Talks - Les IA s'invitent au chevet des développeurs
OCTO Talks - Les IA s'invitent au chevet des développeursOCTO Talks - Les IA s'invitent au chevet des développeurs
OCTO Talks - Les IA s'invitent au chevet des développeurs
 
OCTO Talks - Lancement du livre Culture Test
OCTO Talks - Lancement du livre Culture TestOCTO Talks - Lancement du livre Culture Test
OCTO Talks - Lancement du livre Culture Test
 
Le Comptoir OCTO - Green AI, comment éviter que votre votre potion magique d’...
Le Comptoir OCTO - Green AI, comment éviter que votre votre potion magique d’...Le Comptoir OCTO - Green AI, comment éviter que votre votre potion magique d’...
Le Comptoir OCTO - Green AI, comment éviter que votre votre potion magique d’...
 
OCTO Talks - State of the art Architecture dans les frontend web
OCTO Talks - State of the art Architecture dans les frontend webOCTO Talks - State of the art Architecture dans les frontend web
OCTO Talks - State of the art Architecture dans les frontend web
 
Refcard GraphQL
Refcard GraphQLRefcard GraphQL
Refcard GraphQL
 
Comptoir OCTO ALD Automotive/Leaseplan
Comptoir OCTO ALD Automotive/LeaseplanComptoir OCTO ALD Automotive/Leaseplan
Comptoir OCTO ALD Automotive/Leaseplan
 
Le Comptoir OCTO - Comment optimiser les stocks en linéaire par la Data ?
Le Comptoir OCTO - Comment optimiser les stocks en linéaire par la Data ? Le Comptoir OCTO - Comment optimiser les stocks en linéaire par la Data ?
Le Comptoir OCTO - Comment optimiser les stocks en linéaire par la Data ?
 
Le Comptoir OCTO - Retour sur 5 ans de mise en oeuvre : Comment le RGPD a réi...
Le Comptoir OCTO - Retour sur 5 ans de mise en oeuvre : Comment le RGPD a réi...Le Comptoir OCTO - Retour sur 5 ans de mise en oeuvre : Comment le RGPD a réi...
Le Comptoir OCTO - Retour sur 5 ans de mise en oeuvre : Comment le RGPD a réi...
 
Le Comptoir OCTO - Affinez vos forecasts avec la planification distribuée et...
Le Comptoir OCTO -  Affinez vos forecasts avec la planification distribuée et...Le Comptoir OCTO -  Affinez vos forecasts avec la planification distribuée et...
Le Comptoir OCTO - Affinez vos forecasts avec la planification distribuée et...
 
Le Comptoir OCTO - La formation au cœur de la stratégie d’éco-conception
Le Comptoir OCTO - La formation au cœur de la stratégie d’éco-conceptionLe Comptoir OCTO - La formation au cœur de la stratégie d’éco-conception
Le Comptoir OCTO - La formation au cœur de la stratégie d’éco-conception
 
Le Comptoir OCTO - Une vision de plateforme sans leadership tech n’est qu’hal...
Le Comptoir OCTO - Une vision de plateforme sans leadership tech n’est qu’hal...Le Comptoir OCTO - Une vision de plateforme sans leadership tech n’est qu’hal...
Le Comptoir OCTO - Une vision de plateforme sans leadership tech n’est qu’hal...
 
Le Comptoir OCTO - L'avenir de la gestion du bilan carbone : les solutions E...
Le Comptoir OCTO - L'avenir de la gestion du bilan carbone :  les solutions E...Le Comptoir OCTO - L'avenir de la gestion du bilan carbone :  les solutions E...
Le Comptoir OCTO - L'avenir de la gestion du bilan carbone : les solutions E...
 
Le Comptoir OCTO - Continuous discovery et continuous delivery pour construir...
Le Comptoir OCTO - Continuous discovery et continuous delivery pour construir...Le Comptoir OCTO - Continuous discovery et continuous delivery pour construir...
Le Comptoir OCTO - Continuous discovery et continuous delivery pour construir...
 
RefCard RESTful API Design
RefCard RESTful API DesignRefCard RESTful API Design
RefCard RESTful API Design
 
RefCard API Architecture Strategy
RefCard API Architecture StrategyRefCard API Architecture Strategy
RefCard API Architecture Strategy
 

Softshake 2013 - Du JavaScript propre ? Challenge accepted!