SlideShare a Scribd company logo
1 of 52
Mathieu PARISOT
              @matparisot
2013-04-17       Développer coté client en 2013   1
2013-04-17   Développer coté client en 2013   2
2013-04-17   Développer coté client en 2013   3
Le retour du Client - Serveur

La théorie : découpage en couches, n-tiers

La réalité : code vue et métier intriqué

Avec le WOA on sépare complètement la vue !
        Serveur : expose des services REST
        Client : site Web, appli native, client lourd, etc.


2013-04-17                    Développer coté client en 2013   4
Les sites Webs




             Structure   Style                    Traitement   Ressources




2013-04-17                   Développer coté client en 2013                 5
2013-04-17   Développer coté client en 2013   6
Le CSS

⦿Langage très limité :
         ⦿Pas de variables
         ⦿Beaucoup de valeurs prédéfinies
⦿Mais très compliqué :
         ⦿Héritage en cascade
         ⦿Déclarations à plat
         ⦿Surcharge des sélecteurs



2013-04-17                 Développer coté client en 2013   7
Le reset CSS

⦿Chaque navigateur implémente des styles de
 base
⦿Un reset CSS permet d'avoir le même rendu
 de base sur tous les navigateurs
⦿Nombreux disponibles
         Eric Meyer, HTML5Reset, etc.




2013-04-17                  Développer coté client en 2013   8
Frameworks CSS

⦿Facilite la mise en page d'un site
⦿Mise en page responsive
⦿Plugins Javascript
⦿Exemple : Twitter Bootstrap
         http://twitter.github.com/bootstrap
         http://twitter.github.com/bootstrap/examples/her
         o.html



2013-04-17                 Développer coté client en 2013   9
Surcouche CSS

⦿Création des styles dans un autre langage que
 CSS
⦿Puis compilé vers CSS
⦿Exemple : Less, Sass, Compass




2013-04-17            Développer coté client en 2013   10
LESS
@bgcolor:#543633;                                      #header h1 {
#header {                                                font-size: 26px;
  h1 {                                                   font-weight: bold;
    font-size: 26px;                                     background-color: #543633;
    font-weight: bold;                                 }
   background-color:@bgcolor;                          #header p {
  }                                                      font-size: 12px;
  p { font-size: 12px;                                 }
    a { text-decoration: none;                         #header p a {
      &:hover { border-width: 1px }                      text-decoration: none;
    }                                                  }
  }                                                    #header p a:hover {
}                                                        border-width: 1px;
                                                       }
2013-04-17                        Développer coté client en 2013                      11
2013-04-17   Développer coté client en 2013   12
Le javaScript

⦿Très puissant

⦿Très compliqué

⦿Mais facile d'accès pour les débutants

Code bogué et impossible à maintenir

2013-04-17             Développer coté client en 2013   13
Pourquoi tant de haine ?

             42 == "42" true
             42 === "42" false

             var myInt = parseInt("08");     myInt === 0
             var myInt = parseInt("08", 10); myInt === 8




2013-04-17                  Développer coté client en 2013   14
Le JavaScript coté Server

⦿Explosion du Buzz autours de JavaScript
⦿Plein de frameworks coté client …
⦿… mais aussi coté server !




 A étudier et voir à long terme
2013-04-17             Développer coté client en 2013   15
2013-04-17   Développer coté client en 2013   16
JQuery
⦿Utilisé par 60% des sites !
⦿Fait pour la manipulation du DOM
⦿Efficace, facile, bien documenté
⦿Des tonnes de plugins
  var link = document.createElement('a');
  link.setAttribute('href', 'mylink.htm');
  var elem = document.getElementById("myId");
  elem.appendChild(link);


  $('#myId').append('<a href="mylink.htm">');


2013-04-17                     Développer coté client en 2013   17
JQuery : bonnes pratiques 1/3
⦿Pas de manipulation de DOM dans les boucles
         var parentDiv = $('#emailList');
         for (var i = 0; i < 100; i++) {
           parentDiv.append('<div>' + i + '</div>');
         }
 ⦿ A la place :
         var parentDiv = $('#emailList');
         var divs = '';
         for (var i = 0; i < 100; i++) {
           divs += '<div>' + i + '</div>';
         }
         parentDiv.html(divs);


2013-04-17                           Développer coté client en 2013   18
JQuery : bonnes pratiques 2/3

⦿Sélecteurs simples
         $("body #page:first-child article.main p#intro div");
 ⦿A la place :
         $("#intro div")
 ⦿Encore mieux :
         $("#intro").filter("div")



2013-04-17                    Développer coté client en 2013   19
JQuery : bonnes pratiques 3/3
⦿Eviter les répétitions de selecteurs
         $("#myId").css("color","#FFFFFF");
         $("#myId").css("border","1px solid black");
 ⦿ A la place :
         var $node = $("#myId");
         $node.css("color","#FFFFFF");
         $node.css("border","1px solid black");
 ⦿ Encore mieux :
         $node.css("color","#FFFFFF"). css("border","1px solid
         black");

2013-04-17                    Développer coté client en 2013     20
Underscore.js

⦿Ensemble de méthodes utilitaires
⦿Manipulation de tableaux et collections
⦿Manipulation d'objets et de méthodes
⦿Et bien plus…

         _.each([1, 2, 3], function(num){ alert(num); });
         _.find([1, 2, 3, 4, 5, 6], function(num){
                return num % 2 == 0;
         });
2013-04-17                   Développer coté client en 2013   21
Le templating 1/2

⦿Simplifier la construction du DOM
⦿Plus facile a maintenir et limite les erreurs
html = '<div><div>' + name + '</div><div>' + address.street + ' ';
html += address.zipcode + ' ' + address.city + ' ' + address.country + '</div>';
html += '<div>le site : ' + website + '</div>';
html += '<div>' + creationDate + '</div>';
html += '<div>Capital : ' + fonds + '</div></div>';

<div>
 <div>{{name}}</div>
 <div>{{address.street}} {{address.zipcode}} {{address.city}} {{address.country}}</div>
 <div>le site : {{website}}</div>
 <div>fondée en {{creationDate}}</div>
 <div>Capital : {{fonds}}</div>
</div>
2013-04-17                           Développer coté client en 2013                 22
Le templating 2/2

⦿Mustache : le plus connu mais très lent
         http://mustache.github.com/
⦿Handlebars : très complet
         http://handlebarsjs.com/
⦿Jquote2 et dot.js : moins connus mais rapides
         http://aefxx.com/jquery-plugins/jqote2/
         http://olado.github.com/doT/



2013-04-17                 Développer coté client en 2013   23
Encapsulation 1/2

⦿Eviter les effets de bords
         script1.js :
         var variable = "script1";

         script2.js :
         var variable = "script2";

         index.html :
         <script src="script1.js"></script>
         <script src="script2.js"></script>
         <script>
          console.log(variable); // affiche script2
         </script>
2013-04-17                       Développer coté client en 2013   24
Encapsulation 2/2

⦿Encapsulation de base
         script1.js :
         (function() { var variable = "script1"; }());

         script2.js :
         (function() { var variable = "script2"; }());

         <script src="script1.js"></script>
         <script src="script2.js"></script>
         <script>
          console.log(variable); // variable is not defined
         </script>

2013-04-17                        Développer coté client en 2013   25
La performance
⦿Minifier
         YUI compressor
⦿Compresser
         Mod_deflate sur apache
⦿Utiliser des CDN
         https://developers.google.com/speed/libraries/devguide
⦿Fusionner vos ressources
         http://spritegen.website-performance.org/
⦿Benchmarker
         Chrome, PageSpeed, YSlow


2013-04-17                    Développer coté client en 2013      26
Chargement différé

⦿JavaScript est monothread
⦿La page s'affiche une fois que tous les scripts
 sont exécutés
⦿Repousser l'exécution du javaScript au plus
 tard possible

Scripts en fin de page
Chargement à la demande : lab.js
2013-04-17            Développer coté client en 2013   27
Require.js : le principe

⦿Modularisation de votre JavaScript
⦿Encapsulation + gestion des dépendances
⦿Chargement différé des JavaScript
⦿Optimisation des ressources statiques
⦿Basé sur Asynchronous Module Definition
 (AMD)
⦿Il existe d'autres implémentations de AMD


2013-04-17              Développer coté client en 2013   28
Require.js : un exemple

                   define(function() { return 'cart!'; });

                   define(function() {
                     return {
                       do:function() {console.log('test');}
                     }
                   });

                   define(['./cart','./inventory'],function(cart,inv) {
                     console.log(cart); // affiche 'cart!'
                     inv.do(); // affiche 'test'
                   });
2013-04-17                  Développer coté client en 2013                29
Require.js : l'effet cascade




2013-04-17              Développer coté client en 2013   30
Require.js : l'optimisation

⦿Minify les scripts avec uglify
⦿Minify les CSS et inline les @imports
⦿Concatène les scripts
⦿Inline les templates
⦿Fonctionne avec node.js ou Maven

Moins de requêtes
Fichiers + petits
2013-04-17              Développer coté client en 2013   31
Les Frameworks MVC en JS

⦿Gérer des sites Webs complexes
⦿Nombreuses solutions :
         Angular.js, Backbone.js, Sprout, sammy, Spine,
         Ember.js, batman.js, etc.
 ⦿ Frameworks très jeunes …
 ⦿ … donc c'est un peu le bazar!
 ⦿ Mais très prometteur et incontournable
   dans le futur

2013-04-17                  Développer coté client en 2013   32
Angular.js : le principe
⦿Ne plus devoir manipuler le DOM
⦿Gérer la navigation
⦿Gérer le templating
⦿Gérer les modules
⦿Fragments de page
⦿Injection de dépendances
⦿Appels Ajax

Remplace tous les autres frameworks JS
2013-04-17              Développer coté client en 2013   33
Angular.js : un exemple
<!doctype html>                                         $scope.yourName = 'toto';
<html ng-app>                                           console.log($scope.yourName);
 <head>
   <script src="angular.min.js"></script>               $scope.func = function() {
 </head>                                                  return 'une fonction…';
 <body>                                                 }
  <div>
   <label>Name:</label>                                 angular.module('project', ['dep']).
   <input type="text"                                    config(function($routeProvider) {
           ng-model="yourName" />                          $routeProvider.when('/', {
   <h1>Hello {{ yourName }}!</h1>                                 controller:ListCtrl,
   <span>{{ func() }}                                             templateUrl:'list.html'
  </div>                                                   });
 </body>                                                });
</html>
 2013-04-17                          Développer coté client en 2013                           34
2013-04-17   Développer coté client en 2013   35
Bower

⦿Gérer ses dépendances
⦿Lancé par Twitter mais open source
⦿Basé sur node.js
⦿Utilise la ligne de commande :
         bower search backbone
         bower install backbone
         bower install git://github.com/pivotal/jasmine.git
         bower update

2013-04-17                  Développer coté client en 2013    36
Grunt
⦿Outil de build en JavaScript
⦿Basé sur node.js et lancé en ligne de
 commande
⦿Création de projet basé sur des templates
⦿Plein de plugins :
         ⦿Minification
         ⦿Concatenation
         ⦿Analyse de code
         ⦿Lancer les tests

2013-04-17                   Développer coté client en 2013   37
Les IDE
⦿IntelliJ / Webstorm
         coloration, refactoring, auto complétion, analyse,
         payant
⦿Aptana, Bracket
         coloration, auto complétion, gratuit
⦿Notepad++, SublimText
         coloration, gratuit
⦿scripted, Cloud9
         coloration, complétion, gratuit, en ligne

2013-04-17                     Développer coté client en 2013   38
Le debug

⦿Chrome Dev Tools, Opera Dragonfly, Firefox
 firebug
⦿Inspection CSS
⦿Debug avec points d'arrêt
⦿Console avec exécution JavaScript
⦿Analyse du réseau
⦿Profiling et audit
⦿et bien plus !
2013-04-17              Développer coté client en 2013   39
Quelques sites utiles

⦿jsconsole.com
⦿jsperf.com
⦿jsfiddle.net
⦿github.com
⦿responsinator.com
⦿debug.phonegap.com (weinre)



2013-04-17             Développer coté client en 2013   40
Les tests unitaires

⦿TDD possible en javaScript !
⦿Mais plus compliqué qu'en java ou .Net
⦿Frameworks : Qunit, Jasmine, Mocha
⦿Launchers : Karma (Testacular), JsTestDriver
                describe("A suite", function() {
                 it("contains spec with an expectation",
                function() {
                   expect(true).toBe(true);
                 });
                });

2013-04-17                      Développer coté client en 2013   41
Selenium

⦿Réalise des tests d'IHM :
         ⦿Tester les écrans
         ⦿Tester les interactions utilisateur
         ⦿Tester la navigation
⦿Tester plusieurs navigateurs
⦿Tests via un IDE ou en code
⦿Selenium Grid pour // les tests
⦿Une alternative possible CasperJs
2013-04-17                   Développer coté client en 2013   42
Tester la compatibilité
⦿http://www.browserstack.com
         ⦿Test plein de navigateurs
         ⦿Possibilité de tests via tunnel SSL
         ⦿Tests sur les émulateurs mobiles
⦿VM IE
         ⦿Nécessite virtual PC / windows 7
         ⦿http://www.microsoft.com/en-
          us/download/details.aspx?id=11575

⦿Pour le mobile c'est galère !

2013-04-17                    Développer coté client en 2013   43
Compiler vers JavaScript

⦿Nouvelle tendance
⦿CoffeeScript, TypeScript, Dart, etc.
⦿Comble les lacunes du langage
⦿Syntaxe différente ou non
⦿Code souvent plus maintenable

⦿Attention : debugging plus compliqué

2013-04-17             Développer coté client en 2013   44
Un exemple en CoffeeScript
# Assignment:                                 # Assignment:
number = 42                                   var number = 42;
opposite = true                               var opposite = true;

# Conditions:                                 # Conditions:
number = -42 if opposite                      number = opposite ? -42 : 42;

# Functions:                                  # Functions:
square = (x) -> x * x                         function square(x) { return x * x; }

# Objects:                                    # Objects:
math =                                        math = {
 root: Math.sqrt                               root: Math.sqrt,
 square: square                                square: square,
 cube: (x) -> x * square x                     cube: function(x) { x * square x }
                                              };
 2013-04-17                  Développer coté client en 2013                          45
Intégration continue

⦿Intégration avec Jenkins
         Plugin pour Grunt
         Build du projet via Maven/Gradle/etc.
⦿Analyse du code
         JSLint/JSHint/cssLint
         Plugin JavaScript pour Sonar
⦿Tests unitaires sans navigateur ?
         Phantomjs
         Rhino/Nashorn
2013-04-17                  Développer coté client en 2013   46
Yeoman

⦿Boite à outil du développement web
⦿Création de projets via des templates
⦿Build du projet via Grunt
⦿Dépendances via Bower
⦿Optimisation des ressources
⦿Serveur web intégré
⦿Tests unitaires avec phantomjs
⦿Basé sur node.js
2013-04-17            Développer coté client en 2013   47
2013-04-17   Développer coté client en 2013   48
Je vous ai épargné

⦿La programmation Objet par prototype
⦿Les scopes
⦿L'utilisation de this
⦿Les changements de contexte sur les
 fonctions
⦿Les itérations sur les objets
⦿Et bien d'autres spécificités tordues ou non…


2013-04-17             Développer coté client en 2013   49
Aller plus loin
⦿Lire des livres !
         ⦿Javascript the good parts
         ⦿Pro Javascript techniques
         ⦿Secrets of the JavaScript Ninja
⦿Lire des blogs
         ⦿http://dailyjs.com
         ⦿http://googlewebmastercentral.blogspot.fr/
         ⦿http://bonsaiden.github.com/JavaScript-Garden/
 ⦿ Communauté
         ⦿ ParisJS
         ⦿ DotJs

2013-04-17                    Développer coté client en 2013   50
Et surtout …

     Ne soyez pas dépendant des frameworks !

              JavaScript est un vrai langage !

    Apprenez le si vous comptez faire du web !



2013-04-17                Développer coté client en 2013   51
Merci




2013-04-17   Développer coté client en 2013   52

More Related Content

Viewers also liked

IBM POWER 8, une infrastructure taillée pour l'Open Source
IBM POWER 8, une infrastructure taillée pour l'Open SourceIBM POWER 8, une infrastructure taillée pour l'Open Source
IBM POWER 8, une infrastructure taillée pour l'Open SourceSolutions IT et Business
 
Confepsylon raphael trouillet 90mai 2012
Confepsylon raphael trouillet 90mai 2012Confepsylon raphael trouillet 90mai 2012
Confepsylon raphael trouillet 90mai 2012Laboratoire Epsylon
 
Accessibilité des sites web de tourisme français depuis l'Asie
Accessibilité des sites web de tourisme français depuis l'AsieAccessibilité des sites web de tourisme français depuis l'Asie
Accessibilité des sites web de tourisme français depuis l'AsieIZIASIA
 
Présentation 0604
Présentation 0604Présentation 0604
Présentation 0604valcned
 
Synthese des recettes de macarons
Synthese des recettes de macaronsSynthese des recettes de macarons
Synthese des recettes de macaronsmjdelary
 
Pimp My Legacy
Pimp My LegacyPimp My Legacy
Pimp My LegacySOAT
 
Archiva on glassfish
Archiva on glassfishArchiva on glassfish
Archiva on glassfishMikkaz
 
Introduction au développement piloté par le comportement avec Behat
Introduction au développement piloté par le comportement avec BehatIntroduction au développement piloté par le comportement avec Behat
Introduction au développement piloté par le comportement avec Behathalleck45
 
Backdwarf projet corssmedia utkukaplan versionfinale
Backdwarf projet corssmedia utkukaplan versionfinaleBackdwarf projet corssmedia utkukaplan versionfinale
Backdwarf projet corssmedia utkukaplan versionfinalePascal Minoche
 
Le conseil-municipal-de-nogent-degenere-en-algarade
Le conseil-municipal-de-nogent-degenere-en-algaradeLe conseil-municipal-de-nogent-degenere-en-algarade
Le conseil-municipal-de-nogent-degenere-en-algaradeMarcarazi
 
Louaize bc conference summary french
Louaize bc conference summary frenchLouaize bc conference summary french
Louaize bc conference summary frenchIAU_Past_Conferences
 
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJuridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJURIDICA_JUSTE_POUR_VOUS
 
Ei fort de leau
Ei fort de leauEi fort de leau
Ei fort de leauMaialen_07
 
Kenitra2013 springer,languespecialiseestechnolectes
Kenitra2013 springer,languespecialiseestechnolectesKenitra2013 springer,languespecialiseestechnolectes
Kenitra2013 springer,languespecialiseestechnolectesClaudespringer
 

Viewers also liked (20)

IBM POWER 8, une infrastructure taillée pour l'Open Source
IBM POWER 8, une infrastructure taillée pour l'Open SourceIBM POWER 8, une infrastructure taillée pour l'Open Source
IBM POWER 8, une infrastructure taillée pour l'Open Source
 
Confepsylon raphael trouillet 90mai 2012
Confepsylon raphael trouillet 90mai 2012Confepsylon raphael trouillet 90mai 2012
Confepsylon raphael trouillet 90mai 2012
 
Accessibilité des sites web de tourisme français depuis l'Asie
Accessibilité des sites web de tourisme français depuis l'AsieAccessibilité des sites web de tourisme français depuis l'Asie
Accessibilité des sites web de tourisme français depuis l'Asie
 
Faire des pas de bébé
Faire des pas de bébéFaire des pas de bébé
Faire des pas de bébé
 
Jodete noé x d
Jodete noé x dJodete noé x d
Jodete noé x d
 
Présentation 0604
Présentation 0604Présentation 0604
Présentation 0604
 
Jean claude novaro - verre soufflé
Jean claude novaro - verre souffléJean claude novaro - verre soufflé
Jean claude novaro - verre soufflé
 
Synthese des recettes de macarons
Synthese des recettes de macaronsSynthese des recettes de macarons
Synthese des recettes de macarons
 
Pimp My Legacy
Pimp My LegacyPimp My Legacy
Pimp My Legacy
 
Archiva on glassfish
Archiva on glassfishArchiva on glassfish
Archiva on glassfish
 
Introduction au développement piloté par le comportement avec Behat
Introduction au développement piloté par le comportement avec BehatIntroduction au développement piloté par le comportement avec Behat
Introduction au développement piloté par le comportement avec Behat
 
Backdwarf projet corssmedia utkukaplan versionfinale
Backdwarf projet corssmedia utkukaplan versionfinaleBackdwarf projet corssmedia utkukaplan versionfinale
Backdwarf projet corssmedia utkukaplan versionfinale
 
Le conseil-municipal-de-nogent-degenere-en-algarade
Le conseil-municipal-de-nogent-degenere-en-algaradeLe conseil-municipal-de-nogent-degenere-en-algarade
Le conseil-municipal-de-nogent-degenere-en-algarade
 
Lightning Talk - Damien Thouvenin
Lightning Talk - Damien ThouveninLightning Talk - Damien Thouvenin
Lightning Talk - Damien Thouvenin
 
Louaize bc conference summary french
Louaize bc conference summary frenchLouaize bc conference summary french
Louaize bc conference summary french
 
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJuridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
 
Terra
TerraTerra
Terra
 
Ei fort de leau
Ei fort de leauEi fort de leau
Ei fort de leau
 
Pitch1 lumen
Pitch1 lumenPitch1 lumen
Pitch1 lumen
 
Kenitra2013 springer,languespecialiseestechnolectes
Kenitra2013 springer,languespecialiseestechnolectesKenitra2013 springer,languespecialiseestechnolectes
Kenitra2013 springer,languespecialiseestechnolectes
 

Similar to Conception de code javascript cote client dans la continuité du renouveau du web

Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetDevclic
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010François Wauquier
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
Webinar - Construire le cahier des charges de son site web.pdf
Webinar - Construire le cahier des charges de son site web.pdfWebinar - Construire le cahier des charges de son site web.pdf
Webinar - Construire le cahier des charges de son site web.pdfJulien Dereumaux
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!Manuel Adele
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !Bruno Bonnin
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OSneuros
 
AngularJS et autres techno frontend
AngularJS et autres techno frontendAngularJS et autres techno frontend
AngularJS et autres techno frontendyllieth
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Brigitte Marandon
 
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Adrien Russo
 
Gagnez en productivité grâce aux préprocesseurs css
Gagnez en productivité grâce aux préprocesseurs cssGagnez en productivité grâce aux préprocesseurs css
Gagnez en productivité grâce aux préprocesseurs csspefringant
 
Responsive Web Design : best practices et retour d'expérience de Backelite et...
Responsive Web Design : best practices et retour d'expérience de Backelite et...Responsive Web Design : best practices et retour d'expérience de Backelite et...
Responsive Web Design : best practices et retour d'expérience de Backelite et...Idean France
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesOxalide
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceLudovic Piot
 
iBelieve 2015: Présentation client par Christian Massé de Volubis
iBelieve 2015: Présentation client par Christian Massé de VolubisiBelieve 2015: Présentation client par Christian Massé de Volubis
iBelieve 2015: Présentation client par Christian Massé de VolubisFresche Solutions
 

Similar to Conception de code javascript cote client dans la continuité du renouveau du web (20)

Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internet
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
Webinar - Construire le cahier des charges de son site web.pdf
Webinar - Construire le cahier des charges de son site web.pdfWebinar - Construire le cahier des charges de son site web.pdf
Webinar - Construire le cahier des charges de son site web.pdf
 
Azure Serverless C2S
Azure Serverless C2SAzure Serverless C2S
Azure Serverless C2S
 
Cv khouloud dhouib
Cv khouloud dhouibCv khouloud dhouib
Cv khouloud dhouib
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Pourquoi Firefox OS
Pourquoi Firefox OSPourquoi Firefox OS
Pourquoi Firefox OS
 
AngularJS et autres techno frontend
AngularJS et autres techno frontendAngularJS et autres techno frontend
AngularJS et autres techno frontend
 
Présentation welcom la webperf by object23
Présentation welcom la webperf by object23Présentation welcom la webperf by object23
Présentation welcom la webperf by object23
 
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
Maitriser le SEO d'un site JavaScript - SEO Campus Paris 2022
 
Gagnez en productivité grâce aux préprocesseurs css
Gagnez en productivité grâce aux préprocesseurs cssGagnez en productivité grâce aux préprocesseurs css
Gagnez en productivité grâce aux préprocesseurs css
 
Responsive Web Design : best practices et retour d'expérience de Backelite et...
Responsive Web Design : best practices et retour d'expérience de Backelite et...Responsive Web Design : best practices et retour d'expérience de Backelite et...
Responsive Web Design : best practices et retour d'expérience de Backelite et...
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 
Intro à angular
Intro à angularIntro à angular
Intro à angular
 
iBelieve 2015: Présentation client par Christian Massé de Volubis
iBelieve 2015: Présentation client par Christian Massé de VolubisiBelieve 2015: Présentation client par Christian Massé de Volubis
iBelieve 2015: Présentation client par Christian Massé de Volubis
 

More from SOAT

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018SOAT
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libéréeSOAT
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !SOAT
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseSOAT
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-DurandSOAT
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-DurandSOAT
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido SOAT
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotSOAT
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014SOAT
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...SOAT
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soatSOAT
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...SOAT
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014SOAT
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#SOAT
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatSOAT
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 

More from SOAT (20)

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libérée
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 

Conception de code javascript cote client dans la continuité du renouveau du web

  • 1. Mathieu PARISOT @matparisot 2013-04-17 Développer coté client en 2013 1
  • 2. 2013-04-17 Développer coté client en 2013 2
  • 3. 2013-04-17 Développer coté client en 2013 3
  • 4. Le retour du Client - Serveur La théorie : découpage en couches, n-tiers La réalité : code vue et métier intriqué Avec le WOA on sépare complètement la vue ! Serveur : expose des services REST Client : site Web, appli native, client lourd, etc. 2013-04-17 Développer coté client en 2013 4
  • 5. Les sites Webs Structure Style Traitement Ressources 2013-04-17 Développer coté client en 2013 5
  • 6. 2013-04-17 Développer coté client en 2013 6
  • 7. Le CSS ⦿Langage très limité : ⦿Pas de variables ⦿Beaucoup de valeurs prédéfinies ⦿Mais très compliqué : ⦿Héritage en cascade ⦿Déclarations à plat ⦿Surcharge des sélecteurs 2013-04-17 Développer coté client en 2013 7
  • 8. Le reset CSS ⦿Chaque navigateur implémente des styles de base ⦿Un reset CSS permet d'avoir le même rendu de base sur tous les navigateurs ⦿Nombreux disponibles Eric Meyer, HTML5Reset, etc. 2013-04-17 Développer coté client en 2013 8
  • 9. Frameworks CSS ⦿Facilite la mise en page d'un site ⦿Mise en page responsive ⦿Plugins Javascript ⦿Exemple : Twitter Bootstrap http://twitter.github.com/bootstrap http://twitter.github.com/bootstrap/examples/her o.html 2013-04-17 Développer coté client en 2013 9
  • 10. Surcouche CSS ⦿Création des styles dans un autre langage que CSS ⦿Puis compilé vers CSS ⦿Exemple : Less, Sass, Compass 2013-04-17 Développer coté client en 2013 10
  • 11. LESS @bgcolor:#543633; #header h1 { #header { font-size: 26px; h1 { font-weight: bold; font-size: 26px; background-color: #543633; font-weight: bold; } background-color:@bgcolor; #header p { } font-size: 12px; p { font-size: 12px; } a { text-decoration: none; #header p a { &:hover { border-width: 1px } text-decoration: none; } } } #header p a:hover { } border-width: 1px; } 2013-04-17 Développer coté client en 2013 11
  • 12. 2013-04-17 Développer coté client en 2013 12
  • 13. Le javaScript ⦿Très puissant ⦿Très compliqué ⦿Mais facile d'accès pour les débutants Code bogué et impossible à maintenir 2013-04-17 Développer coté client en 2013 13
  • 14. Pourquoi tant de haine ? 42 == "42" true 42 === "42" false var myInt = parseInt("08"); myInt === 0 var myInt = parseInt("08", 10); myInt === 8 2013-04-17 Développer coté client en 2013 14
  • 15. Le JavaScript coté Server ⦿Explosion du Buzz autours de JavaScript ⦿Plein de frameworks coté client … ⦿… mais aussi coté server !  A étudier et voir à long terme 2013-04-17 Développer coté client en 2013 15
  • 16. 2013-04-17 Développer coté client en 2013 16
  • 17. JQuery ⦿Utilisé par 60% des sites ! ⦿Fait pour la manipulation du DOM ⦿Efficace, facile, bien documenté ⦿Des tonnes de plugins var link = document.createElement('a'); link.setAttribute('href', 'mylink.htm'); var elem = document.getElementById("myId"); elem.appendChild(link); $('#myId').append('<a href="mylink.htm">'); 2013-04-17 Développer coté client en 2013 17
  • 18. JQuery : bonnes pratiques 1/3 ⦿Pas de manipulation de DOM dans les boucles var parentDiv = $('#emailList'); for (var i = 0; i < 100; i++) { parentDiv.append('<div>' + i + '</div>'); } ⦿ A la place : var parentDiv = $('#emailList'); var divs = ''; for (var i = 0; i < 100; i++) { divs += '<div>' + i + '</div>'; } parentDiv.html(divs); 2013-04-17 Développer coté client en 2013 18
  • 19. JQuery : bonnes pratiques 2/3 ⦿Sélecteurs simples $("body #page:first-child article.main p#intro div"); ⦿A la place : $("#intro div") ⦿Encore mieux : $("#intro").filter("div") 2013-04-17 Développer coté client en 2013 19
  • 20. JQuery : bonnes pratiques 3/3 ⦿Eviter les répétitions de selecteurs $("#myId").css("color","#FFFFFF"); $("#myId").css("border","1px solid black"); ⦿ A la place : var $node = $("#myId"); $node.css("color","#FFFFFF"); $node.css("border","1px solid black"); ⦿ Encore mieux : $node.css("color","#FFFFFF"). css("border","1px solid black"); 2013-04-17 Développer coté client en 2013 20
  • 21. Underscore.js ⦿Ensemble de méthodes utilitaires ⦿Manipulation de tableaux et collections ⦿Manipulation d'objets et de méthodes ⦿Et bien plus… _.each([1, 2, 3], function(num){ alert(num); }); _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); 2013-04-17 Développer coté client en 2013 21
  • 22. Le templating 1/2 ⦿Simplifier la construction du DOM ⦿Plus facile a maintenir et limite les erreurs html = '<div><div>' + name + '</div><div>' + address.street + ' '; html += address.zipcode + ' ' + address.city + ' ' + address.country + '</div>'; html += '<div>le site : ' + website + '</div>'; html += '<div>' + creationDate + '</div>'; html += '<div>Capital : ' + fonds + '</div></div>'; <div> <div>{{name}}</div> <div>{{address.street}} {{address.zipcode}} {{address.city}} {{address.country}}</div> <div>le site : {{website}}</div> <div>fondée en {{creationDate}}</div> <div>Capital : {{fonds}}</div> </div> 2013-04-17 Développer coté client en 2013 22
  • 23. Le templating 2/2 ⦿Mustache : le plus connu mais très lent http://mustache.github.com/ ⦿Handlebars : très complet http://handlebarsjs.com/ ⦿Jquote2 et dot.js : moins connus mais rapides http://aefxx.com/jquery-plugins/jqote2/ http://olado.github.com/doT/ 2013-04-17 Développer coté client en 2013 23
  • 24. Encapsulation 1/2 ⦿Eviter les effets de bords script1.js : var variable = "script1"; script2.js : var variable = "script2"; index.html : <script src="script1.js"></script> <script src="script2.js"></script> <script> console.log(variable); // affiche script2 </script> 2013-04-17 Développer coté client en 2013 24
  • 25. Encapsulation 2/2 ⦿Encapsulation de base script1.js : (function() { var variable = "script1"; }()); script2.js : (function() { var variable = "script2"; }()); <script src="script1.js"></script> <script src="script2.js"></script> <script> console.log(variable); // variable is not defined </script> 2013-04-17 Développer coté client en 2013 25
  • 26. La performance ⦿Minifier YUI compressor ⦿Compresser Mod_deflate sur apache ⦿Utiliser des CDN https://developers.google.com/speed/libraries/devguide ⦿Fusionner vos ressources http://spritegen.website-performance.org/ ⦿Benchmarker Chrome, PageSpeed, YSlow 2013-04-17 Développer coté client en 2013 26
  • 27. Chargement différé ⦿JavaScript est monothread ⦿La page s'affiche une fois que tous les scripts sont exécutés ⦿Repousser l'exécution du javaScript au plus tard possible Scripts en fin de page Chargement à la demande : lab.js 2013-04-17 Développer coté client en 2013 27
  • 28. Require.js : le principe ⦿Modularisation de votre JavaScript ⦿Encapsulation + gestion des dépendances ⦿Chargement différé des JavaScript ⦿Optimisation des ressources statiques ⦿Basé sur Asynchronous Module Definition (AMD) ⦿Il existe d'autres implémentations de AMD 2013-04-17 Développer coté client en 2013 28
  • 29. Require.js : un exemple define(function() { return 'cart!'; }); define(function() { return { do:function() {console.log('test');} } }); define(['./cart','./inventory'],function(cart,inv) { console.log(cart); // affiche 'cart!' inv.do(); // affiche 'test' }); 2013-04-17 Développer coté client en 2013 29
  • 30. Require.js : l'effet cascade 2013-04-17 Développer coté client en 2013 30
  • 31. Require.js : l'optimisation ⦿Minify les scripts avec uglify ⦿Minify les CSS et inline les @imports ⦿Concatène les scripts ⦿Inline les templates ⦿Fonctionne avec node.js ou Maven Moins de requêtes Fichiers + petits 2013-04-17 Développer coté client en 2013 31
  • 32. Les Frameworks MVC en JS ⦿Gérer des sites Webs complexes ⦿Nombreuses solutions : Angular.js, Backbone.js, Sprout, sammy, Spine, Ember.js, batman.js, etc. ⦿ Frameworks très jeunes … ⦿ … donc c'est un peu le bazar! ⦿ Mais très prometteur et incontournable dans le futur 2013-04-17 Développer coté client en 2013 32
  • 33. Angular.js : le principe ⦿Ne plus devoir manipuler le DOM ⦿Gérer la navigation ⦿Gérer le templating ⦿Gérer les modules ⦿Fragments de page ⦿Injection de dépendances ⦿Appels Ajax Remplace tous les autres frameworks JS 2013-04-17 Développer coté client en 2013 33
  • 34. Angular.js : un exemple <!doctype html> $scope.yourName = 'toto'; <html ng-app> console.log($scope.yourName); <head> <script src="angular.min.js"></script> $scope.func = function() { </head> return 'une fonction…'; <body> } <div> <label>Name:</label> angular.module('project', ['dep']). <input type="text" config(function($routeProvider) { ng-model="yourName" /> $routeProvider.when('/', { <h1>Hello {{ yourName }}!</h1> controller:ListCtrl, <span>{{ func() }} templateUrl:'list.html' </div> }); </body> }); </html> 2013-04-17 Développer coté client en 2013 34
  • 35. 2013-04-17 Développer coté client en 2013 35
  • 36. Bower ⦿Gérer ses dépendances ⦿Lancé par Twitter mais open source ⦿Basé sur node.js ⦿Utilise la ligne de commande : bower search backbone bower install backbone bower install git://github.com/pivotal/jasmine.git bower update 2013-04-17 Développer coté client en 2013 36
  • 37. Grunt ⦿Outil de build en JavaScript ⦿Basé sur node.js et lancé en ligne de commande ⦿Création de projet basé sur des templates ⦿Plein de plugins : ⦿Minification ⦿Concatenation ⦿Analyse de code ⦿Lancer les tests 2013-04-17 Développer coté client en 2013 37
  • 38. Les IDE ⦿IntelliJ / Webstorm coloration, refactoring, auto complétion, analyse, payant ⦿Aptana, Bracket coloration, auto complétion, gratuit ⦿Notepad++, SublimText coloration, gratuit ⦿scripted, Cloud9 coloration, complétion, gratuit, en ligne 2013-04-17 Développer coté client en 2013 38
  • 39. Le debug ⦿Chrome Dev Tools, Opera Dragonfly, Firefox firebug ⦿Inspection CSS ⦿Debug avec points d'arrêt ⦿Console avec exécution JavaScript ⦿Analyse du réseau ⦿Profiling et audit ⦿et bien plus ! 2013-04-17 Développer coté client en 2013 39
  • 41. Les tests unitaires ⦿TDD possible en javaScript ! ⦿Mais plus compliqué qu'en java ou .Net ⦿Frameworks : Qunit, Jasmine, Mocha ⦿Launchers : Karma (Testacular), JsTestDriver describe("A suite", function() { it("contains spec with an expectation", function() { expect(true).toBe(true); }); }); 2013-04-17 Développer coté client en 2013 41
  • 42. Selenium ⦿Réalise des tests d'IHM : ⦿Tester les écrans ⦿Tester les interactions utilisateur ⦿Tester la navigation ⦿Tester plusieurs navigateurs ⦿Tests via un IDE ou en code ⦿Selenium Grid pour // les tests ⦿Une alternative possible CasperJs 2013-04-17 Développer coté client en 2013 42
  • 43. Tester la compatibilité ⦿http://www.browserstack.com ⦿Test plein de navigateurs ⦿Possibilité de tests via tunnel SSL ⦿Tests sur les émulateurs mobiles ⦿VM IE ⦿Nécessite virtual PC / windows 7 ⦿http://www.microsoft.com/en- us/download/details.aspx?id=11575 ⦿Pour le mobile c'est galère ! 2013-04-17 Développer coté client en 2013 43
  • 44. Compiler vers JavaScript ⦿Nouvelle tendance ⦿CoffeeScript, TypeScript, Dart, etc. ⦿Comble les lacunes du langage ⦿Syntaxe différente ou non ⦿Code souvent plus maintenable ⦿Attention : debugging plus compliqué 2013-04-17 Développer coté client en 2013 44
  • 45. Un exemple en CoffeeScript # Assignment: # Assignment: number = 42 var number = 42; opposite = true var opposite = true; # Conditions: # Conditions: number = -42 if opposite number = opposite ? -42 : 42; # Functions: # Functions: square = (x) -> x * x function square(x) { return x * x; } # Objects: # Objects: math = math = { root: Math.sqrt root: Math.sqrt, square: square square: square, cube: (x) -> x * square x cube: function(x) { x * square x } }; 2013-04-17 Développer coté client en 2013 45
  • 46. Intégration continue ⦿Intégration avec Jenkins Plugin pour Grunt Build du projet via Maven/Gradle/etc. ⦿Analyse du code JSLint/JSHint/cssLint Plugin JavaScript pour Sonar ⦿Tests unitaires sans navigateur ? Phantomjs Rhino/Nashorn 2013-04-17 Développer coté client en 2013 46
  • 47. Yeoman ⦿Boite à outil du développement web ⦿Création de projets via des templates ⦿Build du projet via Grunt ⦿Dépendances via Bower ⦿Optimisation des ressources ⦿Serveur web intégré ⦿Tests unitaires avec phantomjs ⦿Basé sur node.js 2013-04-17 Développer coté client en 2013 47
  • 48. 2013-04-17 Développer coté client en 2013 48
  • 49. Je vous ai épargné ⦿La programmation Objet par prototype ⦿Les scopes ⦿L'utilisation de this ⦿Les changements de contexte sur les fonctions ⦿Les itérations sur les objets ⦿Et bien d'autres spécificités tordues ou non… 2013-04-17 Développer coté client en 2013 49
  • 50. Aller plus loin ⦿Lire des livres ! ⦿Javascript the good parts ⦿Pro Javascript techniques ⦿Secrets of the JavaScript Ninja ⦿Lire des blogs ⦿http://dailyjs.com ⦿http://googlewebmastercentral.blogspot.fr/ ⦿http://bonsaiden.github.com/JavaScript-Garden/ ⦿ Communauté ⦿ ParisJS ⦿ DotJs 2013-04-17 Développer coté client en 2013 50
  • 51. Et surtout … Ne soyez pas dépendant des frameworks ! JavaScript est un vrai langage ! Apprenez le si vous comptez faire du web ! 2013-04-17 Développer coté client en 2013 51
  • 52. Merci 2013-04-17 Développer coté client en 2013 52