SlideShare une entreprise Scribd logo
1  sur  100
Télécharger pour lire hors ligne
Inclure du javascript de
    manière performante




Jean-pierre VINCENT
Braincracking.org
Orateur
              Jean-pierre VINCENT

En ligne :
   •braincracking.org (veille)
   •twitter.com/theystolemynick
   •jp@vincent.net
   •google it : jpvincent

10 ans de Web dont :
   •3 ans de Yahoo!
   •2 ans d'application Web (timeofmylife.com)
Pourquoi ?


rendu rapide = argent




bit.ly/perfs_benefice
bit.ly/perfs_benefice2
Comment


Inclure JS de manière non bloquante

           (entre autres)
Le fautif
<script
src="my.js"></script>
</head>
Le fautif
<script
src="my.js"></script>
</head>

 •bloque ce qui vient après :
    •rendu
Le fautif
<script
src="my.js"></script>
</head>

 •bloque ce qui vient après :
    •rendu
    •exécution
Le fautif
<script
src="my.js"></script>
</head>

 •bloque ce qui vient après :
    •rendu
    •exécution
    •téléchargement
Le fautif
<script
src="my.js"></script>
</head>

 •bloque ce qui vient après :
    •rendu
    •exécution
    •téléchargement
 •IE6-7 : un seul JS à la fois
exemple
réservation voyages-sncf.com :
   •HTML obtenu en 200ms (!)
exemple
réservation voyages-sncf.com :
   •HTML obtenu en 200ms (!)
   •certains CSS arrivent en 50ms (!!)
        (je voudrais bien jouer avec ce ping là)
exemple
réservation voyages-sncf.com :
   •HTML obtenu en 200ms (!)
   •certains CSS arrivent en 50ms (!!)
        (je voudrais bien jouer avec ce ping là)



  •au final : 2s de page blanche
                  #fail


                bit.ly/perfs_sncf
Objectif

          remplacer
<script
src="my.js"></script>
</head>
Alternatives
•Inline
Alternatives
•Inline


•Bottom
Alternatives
•Inline


•Bottom


•DOM
Alternatives
que des désavantages
Alternatives
que des désavantages
        mais
Alternatives
 que des désavantages
         mais


non bloquant
      (= argent)
Inline
Inline

<script>
 <?php include('my.js'); ?>
</script>
</head>
Inline

✓ ordre d'exécution
Inline

✓ ordre d'exécution
✓ dépendances inline
Inline

✓ ordre d'exécution
✓ dépendances inline
✓ non bloquant (ou presque : bit.ly/inline_bloquant)
Inline

✓ ordre d'exécution
✓ dépendances inline
✓ non bloquant (ou presque : bit.ly/inline_bloquant)
✓ document.write()
Inline

✓ ordre d'exécution
✓ dépendances inline
✓ non bloquant (ou presque : bit.ly/inline_bloquant)
✓ document.write()
✓ pas de HTTP
Inline

✓ ordre d'exécution
✓ dépendances inline
✓ non bloquant (ou presque : bit.ly/inline_bloquant)
✓ document.write()
✓ pas de HTTP

✗ pas de cache
Inline
Bon pour :

  •beaucoup de nouveaux visiteurs
Inline
Bon pour :

  •beaucoup de nouveaux visiteurs

  •peu de JS
Inline
Bon pour :

  •beaucoup de nouveaux visiteurs

  •peu de JS

  •bonne bande passante (France)
Inline
•évènementielle (jeux-concours)
Inline
•évènementielle (jeux-concours)

•Homepage, sans cookie
  •Google Search, Yahoo! (avant)
  •Netvibes, Facebook
Inline
•évènementielle (jeux-concours)

•Homepage, sans cookie
  •Google Search, Yahoo! (avant)
  •Netvibes, Facebook

•pages d'entrées
  •login
  •signup
Bottom


<script
src="my.js"></script>
</body>
Bottom
Bottom

✓ ordre d'exécution
Bottom

✓ ordre d'exécution
✓ non bloquant
Bottom

✓ ordre d'exécution
✓ non bloquant
✓ mise en cache
Bottom

✓ ordre d'exécution
✓ non bloquant
✓ mise en cache


✗ dépendances inline
Bottom

✓ ordre d'exécution
✓ non bloquant
✓ mise en cache


✗ dépendances inline
✗ document.write()
Bottom
Bon pour les pages dont :
Bottom
Bon pour les pages dont :

  •le contenu textuel est primordial
Bottom
Bon pour les pages dont :

  •le contenu textuel est primordial
  •le HTML est rapide
Bottom
Bon pour les pages dont :

  •le contenu textuel est primordial
  •le HTML est rapide
  •reçoit des visiteurs zappeurs
Bottom
Bon pour les pages dont :

  •le contenu textuel est primordial
  •le HTML est rapide
  •reçoit des visiteurs zappeurs
  •JS est secondaire mais lourd
     •publicités
     •widgets
Bottom
Type de pages :

  •Blogs, Journaux
Bottom
Type de pages :

  •Blogs, Journaux
  •Boutiques
Bottom
Type de pages :

  •Blogs, Journaux
  •Boutiques
  •Comparateurs
Bottom
Type de pages :

  •Blogs, Journaux
  •Boutiques
  •Comparateurs
  •...
Bottom - condition 1

 contenu principal envoyé
   en moins de 500ms ?
Bottom - condition 1

    contenu principal envoyé
      en moins de 500ms ?

•flush()
Bottom - condition 1

   contenu principal envoyé
     en moins de 500ms ?

•flush()
•cache serveur
Bottom - condition 1

   contenu principal envoyé
     en moins de 500ms ?

•flush()
•cache serveur
•en premier dans la source
Bottom - condition 2
  dépendances JS inline
      correctibles ?
Bottom - condition 2
     dépendances JS inline
         correctibles ?

•mute + eval() : bit.ly/mute_eval
Bottom - condition 2
     dépendances JS inline
         correctibles ?

•mute + eval() : bit.ly/mute_eval

•hijacking
Bottom - condition 2
       dépendances JS inline
           correctibles ?

  •mute + eval() : bit.ly/mute_eval

  •hijacking

Si non, modification du JS obligatoire
DOM
DOM
function loader(fCallback) {




}
DOM
function loader(fCallback) {
var oScript =
document
.getElementsByTagName("head")[0]
 .createElement('script');




}
DOM
function loader(fCallback) {
var oScript =
document
.getElementsByTagName("head")[0]
 .createElement('script');
oScript.src= 'my.js';


}
DOM
function loader(fCallback) {
var oScript =
document
.getElementsByTagName("head")[0]
  .createElement('script');
oScript.src= 'my.js';
oScript.onload = fCallback;
oScript.onreadystatechange =
fCallback;
}
DOM
jQuery :
$.getScript(
  'my.js',
  fCallback);

YUI 3 :
Y.Get.script(
  'my.js',
   {onSuccess: fCallback} );
DOM

✓ non bloquant
DOM

✓ non bloquant
✓ mise en cache
DOM

✓ non bloquant
✓ mise en cache
✓ IE6-7 parallélise ! (bit.ly/dom_IE_para)
DOM

✓ non bloquant
✓ mise en cache
✓ IE6-7 parallélise ! (bit.ly/dom_IE_para)

✗ dépendances inline
DOM

✓ non bloquant
✓ mise en cache
✓ IE6-7 parallélise ! (bit.ly/dom_IE_para)

✗ dépendances inline
✗ document.write()
DOM

✓ non bloquant
✓ mise en cache
✓ IE6-7 parallélise ! (bit.ly/dom_IE_para)

✗ dépendances inline
✗ document.write()
✗ ordre d'exécution
DOM
Bon pour les pages :
DOM
Bon pour les pages :

  •éligibles à Bottom
DOM
Bon pour les pages :

     •éligibles à Bottom
     •HTML > 0.5 - 1s
ou
DOM
Bon pour les pages :

     •éligibles à Bottom
     •HTML > 0.5 - 1s
ou
     •gros volume de JS ( > 500k
     décompressé)
DOM
Type de pages :

  •Blogs, Journaux
  •Boutiques
  •Comparateurs
  •...
DOM
Type de pages :

  •Blogs, Journaux
  •Boutiques
  •Comparateurs
  •...
  •Applications Web
DOM - préalable
Découper son JS en modules
DOM - préalable
Découper son JS en modules



1 module PHP = 1 fonctionalité = 1 JS

      lui donner un identifiant
DOM - préalable
✓ Découper son JS en modules

Centraliser les inclusions :

MY.loader =
    function(sScriptID, fCallback) {



};
DOM - préalable
✓ Découper son JS en modules

Centraliser les inclusions :

MY.loader =
    function(sScriptID, fCallback) {
      $.getScript(
        sScriptID+'.js',
        fCallback);
};
DOM - préalable
✓ Découper son JS en modules
✓ Centraliser les inclusions
Corriger toutes ses dépendances :
<form id="login-form">
...
</form>
<
DOM - préalable
✓ Découper son JS en modules
✓ Centraliser les inclusions
Corriger toutes ses dépendances :
<form id="login-form">
...
</form>
<script>

  MY.enrichForm('login-form');

</script>
DOM - préalable
✓ Découper son JS en modules
✓ Centraliser les inclusions
Corriger toutes ses dépendances :
<form id="login-form">
...
</form>
<script>
MY.loader('login-js', function() {
  MY.enrichForm('login-form');
});
</script>
DOM - préalable
✓ Découper son JS en modules
✓ Centraliser les inclusions
✓ Corriger toutes ses dépendances
DOM - préalable
✓ Découper son JS en modules
✓ Centraliser les inclusions
✓ Corriger toutes ses dépendances
✓ Concaténer les fichiers communs
DOM - évolution
✓ Découper son JS en modules
✓ Centraliser les inclusions
✓ Corriger toutes ses dépendances
✓ Concaténer les fichiers communs
Plus tard :
  •gérer les inclusions multiples
DOM - évolution
✓ Découper son JS en modules
✓ Centraliser les inclusions
✓ Corriger toutes ses dépendances
✓ Concaténer les fichiers communs
Plus tard :
  •gérer les inclusions multiples
Tactique YUI3 :
  •gérer dépendances entre classes
DOM - évolution
✓ Découper son JS en modules
✓ Centraliser les inclusions
✓ Corriger toutes ses dépendances
✓ Concaténer les fichiers communs
Plus tard :
  •gérer les inclusions multiples
Tactique YUI3 :
  •gérer dépendances entre classes
  •générer les JS à la volée
Etude de cas
Netvibes :

  •inline : 100Ko de JS

  •DOM : 260Ko de JS

  •DOM : widget JS
Etude de cas
Facebook (Wall) :
Etude de cas
Facebook (Wall) :
  •flush() HTML presque vide
Etude de cas
Facebook (Wall) :
  •flush() HTML presque vide
  •inline : 1 loader DOM + 1 loader
  spécial (bigPipe : bit.ly/fb_bigpipe)
Etude de cas
Facebook (Wall) :
  •flush() HTML presque vide
  •inline : 1 loader DOM + 1 loader
  spécial (bigPipe : bit.ly/fb_bigpipe)
  •flush() des modules 1 par 1
Etude de cas
Facebook (Wall) :
  •flush() HTML presque vide
  •inline : 1 loader DOM + 1 loader
  spécial (bigPipe : bit.ly/fb_bigpipe)
  •flush() des modules 1 par 1
  •DOM :9 JS chargés (1 principal + 8
  modules)
Etude de cas
Facebook (Wall) :
  •flush() HTML presque vide
  •inline : 1 loader DOM + 1 loader
  spécial (bigPipe : bit.ly/fb_bigpipe)
  •flush() des modules 1 par 1
  •DOM :9 JS chargés (1 principal + 8
  modules)
  •meme technique pour CSS
Etude de cas
YUI 3 :
Etude de cas
YUI 3 :

  •tout appel de code commence dans
  une fonction de callback
Etude de cas
YUI 3 :

  •tout appel de code commence dans
  une fonction de callback
  •liste manuelle des dépendances
Etude de cas
YUI 3 :

  •tout appel de code commence dans
  une fonction de callback
  •liste manuelle des dépendances
  •le loader connait les dépendances
  et les fichiers déjà chargés
Etude de cas
YUI 3 :

  •tout appel de code commence dans
  une fonction de callback
  •liste manuelle des dépendances
  •le loader connait les dépendances
  et les fichiers déjà chargés
  •coté serveur : un combinateur
Orateur
              Jean-pierre VINCENT

En ligne :
   •braincracking.org (veille)
   •twitter.com/theystolemynick
   •jp@vincent.net
   •google it : jpvincent

10 ans de Web dont :
   •3 ans de Yahoo!
   •2 ans d'application Web (timeofmylife.com)

Contenu connexe

Tendances

Supports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSSupports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSAnnabelle Buffart
 
HTML5 / CSS3 : Mythes et realite
HTML5 / CSS3 : Mythes et realiteHTML5 / CSS3 : Mythes et realite
HTML5 / CSS3 : Mythes et realiteRaphaël Goetter
 
La guerre SEO du CMS : WordPress VS Drupal
La guerre SEO du CMS : WordPress VS DrupalLa guerre SEO du CMS : WordPress VS Drupal
La guerre SEO du CMS : WordPress VS DrupalDaniel Roch - SeoMix
 
Créer son site web avec WordPress
Créer son site web avec WordPressCréer son site web avec WordPress
Créer son site web avec WordPressAbel LIFAEFI MBULA
 
HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsRémy Savard
 
Comment réussir une migration de site web en seo ?
Comment réussir une migration de site web en seo ?Comment réussir une migration de site web en seo ?
Comment réussir une migration de site web en seo ?Patrick Valibus
 
Mieux Filtrer ses listes WordPress avec Ajax et WP_Query
Mieux Filtrer ses listes WordPress avec Ajax et WP_QueryMieux Filtrer ses listes WordPress avec Ajax et WP_Query
Mieux Filtrer ses listes WordPress avec Ajax et WP_QuerySymetris
 
64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPressAurélien Denis
 
Optimiser les performances dans Wordpress
Optimiser les performances dans WordpressOptimiser les performances dans Wordpress
Optimiser les performances dans WordpressNicolas Juen
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressDaniel Roch - SeoMix
 
10 conseils pour booster les performances de votre site sous WordPress
10 conseils pour booster les performances de votre site sous WordPress10 conseils pour booster les performances de votre site sous WordPress
10 conseils pour booster les performances de votre site sous WordPressAurélien Denis
 
Intégrateurs, bousculez vos habitudes
Intégrateurs, bousculez vos habitudesIntégrateurs, bousculez vos habitudes
Intégrateurs, bousculez vos habitudesRaphaël Goetter
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressAurélien Denis
 
Wordpress et SEO - Campus Made in Blog 2014 Montréal
Wordpress et SEO - Campus Made in Blog 2014 MontréalWordpress et SEO - Campus Made in Blog 2014 Montréal
Wordpress et SEO - Campus Made in Blog 2014 MontréalMade in
 
Introduction à la performance web
Introduction à la performance webIntroduction à la performance web
Introduction à la performance webRaphaël Goetter
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Jean-Pierre Vincent
 

Tendances (19)

Supports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSSupports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMS
 
HTML5 / CSS3 : Mythes et realite
HTML5 / CSS3 : Mythes et realiteHTML5 / CSS3 : Mythes et realite
HTML5 / CSS3 : Mythes et realite
 
La guerre SEO du CMS : WordPress VS Drupal
La guerre SEO du CMS : WordPress VS DrupalLa guerre SEO du CMS : WordPress VS Drupal
La guerre SEO du CMS : WordPress VS Drupal
 
Créer son site web avec WordPress
Créer son site web avec WordPressCréer son site web avec WordPress
Créer son site web avec WordPress
 
Html5 bonnes-pratiques
Html5 bonnes-pratiquesHtml5 bonnes-pratiques
Html5 bonnes-pratiques
 
HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux éléments
 
Comment réussir une migration de site web en seo ?
Comment réussir une migration de site web en seo ?Comment réussir une migration de site web en seo ?
Comment réussir une migration de site web en seo ?
 
Mieux Filtrer ses listes WordPress avec Ajax et WP_Query
Mieux Filtrer ses listes WordPress avec Ajax et WP_QueryMieux Filtrer ses listes WordPress avec Ajax et WP_Query
Mieux Filtrer ses listes WordPress avec Ajax et WP_Query
 
64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress
 
Optimiser les performances dans Wordpress
Optimiser les performances dans WordpressOptimiser les performances dans Wordpress
Optimiser les performances dans Wordpress
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPress
 
Formation php pdo
Formation php pdoFormation php pdo
Formation php pdo
 
10 conseils pour booster les performances de votre site sous WordPress
10 conseils pour booster les performances de votre site sous WordPress10 conseils pour booster les performances de votre site sous WordPress
10 conseils pour booster les performances de votre site sous WordPress
 
Intégrateurs, bousculez vos habitudes
Intégrateurs, bousculez vos habitudesIntégrateurs, bousculez vos habitudes
Intégrateurs, bousculez vos habitudes
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPress
 
Wordpress et SEO - Campus Made in Blog 2014 Montréal
Wordpress et SEO - Campus Made in Blog 2014 MontréalWordpress et SEO - Campus Made in Blog 2014 Montréal
Wordpress et SEO - Campus Made in Blog 2014 Montréal
 
Introduction à la performance web
Introduction à la performance webIntroduction à la performance web
Introduction à la performance web
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?
 

En vedette

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Javajollivetc
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmineTimothy Oxley
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaChristopher Bartling
 

En vedette (8)

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Java
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
 
JASMINE
JASMINEJASMINE
JASMINE
 
Karma - JS Test Runner
Karma - JS Test RunnerKarma - JS Test Runner
Karma - JS Test Runner
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
 
Jasmine
JasmineJasmine
Jasmine
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 

Similaire à Inclure du Javascript de manière performante

Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Jean-Pierre Vincent
 
Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Componentscjolif
 
Le SEO JavaScript démystifié
Le SEO JavaScript démystifiéLe SEO JavaScript démystifié
Le SEO JavaScript démystifiéAdrien Russo
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidemaru.maru
 
technologie web - part2
technologie web - part2technologie web - part2
technologie web - part2Benoît Simard
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)Nicolas Aguenot
 
Les défauts de WordPress pour le SEO
Les défauts de WordPress pour le SEOLes défauts de WordPress pour le SEO
Les défauts de WordPress pour le SEODaniel Roch - SeoMix
 
Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Cédric MORIN
 
Drupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalDrupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalSkilld
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015Wisembly
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...TheFamily
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
Internationalisation du Front
Internationalisation du FrontInternationalisation du Front
Internationalisation du FrontYannick Croissant
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jGabriel Pillet 🐙
 

Similaire à Inclure du Javascript de manière performante (20)

Html5 now light
Html5 now lightHtml5 now light
Html5 now light
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010
 
Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Components
 
Le SEO JavaScript démystifié
Le SEO JavaScript démystifiéLe SEO JavaScript démystifié
Le SEO JavaScript démystifié
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-side
 
technologie web - part2
technologie web - part2technologie web - part2
technologie web - part2
 
ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)ISCOM::HTML/CSS::session1 (20140930)
ISCOM::HTML/CSS::session1 (20140930)
 
Les défauts de WordPress pour le SEO
Les défauts de WordPress pour le SEOLes défauts de WordPress pour le SEO
Les défauts de WordPress pour le SEO
 
Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010Ma participation au WebPerf Contest 2010
Ma participation au WebPerf Contest 2010
 
CasperJS
CasperJSCasperJS
CasperJS
 
La performance sur mobile
La performance sur mobileLa performance sur mobile
La performance sur mobile
 
Drupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances DrupalDrupagora 2012 Optimisation performances Drupal
Drupagora 2012 Optimisation performances Drupal
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 
Internationalisation du Front
Internationalisation du FrontInternationalisation du Front
Internationalisation du Front
 
HTML5
HTML5HTML5
HTML5
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 

Plus de Jean-Pierre Vincent

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pagesJean-Pierre Vincent
 
Les Performance de rendu sur mobile
Les Performance de rendu sur mobileLes Performance de rendu sur mobile
Les Performance de rendu sur mobileJean-Pierre Vincent
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleJean-Pierre Vincent
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyJean-Pierre Vincent
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement WebJean-Pierre Vincent
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaJean-Pierre Vincent
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsJean-Pierre Vincent
 

Plus de Jean-Pierre Vincent (13)

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pages
 
Les Performance de rendu sur mobile
Les Performance de rendu sur mobileLes Performance de rendu sur mobile
Les Performance de rendu sur mobile
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exemple
 
Introduction à la webperf
Introduction à la webperfIntroduction à la webperf
Introduction à la webperf
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwiparty
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Les performances Web mobile
Les performances Web mobileLes performances Web mobile
Les performances Web mobile
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement Web
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimedia
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIs
 

Inclure du Javascript de manière performante