12
JAN

Head JS: Accelérez votre site grâce à 2,30kb de Javascript

Publié le 12/01/11 à 16h08 par Cethy

Voici un script bien pratique pour tous les développeurs qui vous permettra d'accélerer le chargement de vos pages web à l'aide de 2.30kb de Javascript !

Head.js

Chargeur JavaScript

head.js("/path/to/jquery.js", "/google/analytics.js", "/js/site.js", function() {
    // code ici
});

Head JS charge les fichiers javascript en les traitant comme des images, SANS bloquer le chargement de la page. La page est donc plus rapide, même avec un seul fichier combiné.

 

Organisateur JavaScript

Vous optimisez vos pages en placant les appels aux scripts JS en bas de page ? Bien. Mais pouvez-vous faire ca ?

// utiliser jQuery dans le coprs de la page, même si la librairie n'est pas encore incluse
head.ready(function() {
    $("#my").jquery_plugin();
});
 
// charge jQuery à n'importe quel endroit de votre page
head.js("/path/to/jquery.js");    

 

Modernisateur CSS

Head JS ajoute des classes à la racine du document html, pour que vous puissiez faire cela :

/* cible CSS pour les navigateurs ne supportant pas box-shadow */
.no-boxshadow .box {
    border: 2px solid #ddd;
}

 

facilitateur HTML5

Les DIV, c'est bien, mais Head JS vous permet d'être sémantique et futuriste.

<style>
   article { text-shadow:0 0 1px #ccc; }
</style>
 
<!-- works in IE too -->
<article>
   <header></header>
   <section></section>
   <footer></footer>
</article>

Détecteur de taille d'écran

Concevoir des pages pour un écran de 1980px de large et faites les fonctionner sur un écran 10" ou encore sur des téléphones mobiles.

/* screen size less than 1024 pixels */
.lt-1024 #hero { background-image:(medium.jpg); }
 
/* fine tune for mobile phone */
.lt-640 #hero { background-image:(small.jpg); }

Si vous redimensionnez votre navigateur, les règles CSS vont dynamiquement suivre. Head JS s'occupe de tout.

 

CSS dynamique

Styles pour divers états d'application

<script>
/* detect whether user is logged in. here we check for an existence of a cookie */
head.feature("logged", mycookielib.get_cookie("auth_token"));
</script>
 
<style>
/* .. and write CSS accordingly */
.logged #login-box { display: none; }
</style>

A chaque fois que vous appelez "head.feature()", vos règles CSS suivent.

 

Routeur CSS

Cible CSS pour certaines pages et chemins

/* CSS targeted for home page only */
.root-section #index-page
   
/* make sidebar visible under /plugins  */   
.plugins-section #sidebar { display: block; }

 

Détecteur de navigateur

Tous les navigateurs sont détectés, mais nous aimons tous IE.

/* older than IE9 */
.lt-ie9 .box { padding: 10px; }
 
/* CSS fixes for IE6 */
.ie6 ul  { list-style: none; }

 

Détecteur de fonction JavaScript

Chaque fonction peut être consultée dans la variable globale JavaScript HEAD.

if (head.logged) {
   // do things
}

 

Site Officiel

Baraguiné par mike1310 le 12/01/11 à 17h04
mike1310 sur La Ferme du Web
Je viens de faire le test sur le site mais je trouve le résultat pas très concluant.
En effet, dans certains cas, le fait de charger avec head.js est plus long que sans :) et dans la plus part des cas, je gagne à peine 100ms.
Peut être un problème de connexion de mon coté mais j'en doute...
Baraguiné par Helios le 12/01/11 à 18h29
Helios sur La Ferme du Web
Pour la partie accélération, si on charge ses scripts en bas de page il n'y aura pas de gain à priori puisque les 2 méthodes ont exactement le même principe : faire charger le JS après le chargement de la page.

Après, pour ce qui est de la partie "organisateur de javascript", je ne suis pas particulièrement convaincu, même le contraire : si j'ai bien compris le fonctionnement, on peut mettre du script utilisant JQuery dans le corps de la page avant que celle-ci ne soit chargée, mais l'exécution du code ne se fera de toute manière qu'après son chargement (sinon faut m'expliquer comment se produit le miracle). Autrement dit, on ne respecte plus la séparation HTML/JS et on alourdit un peu le chargement de la page mais pour quel bénéfice ??

Pour tout le reste par contre, je suis très intéressé et je vais regarder ça plus en détail. Merci La Ferme pour cette découverte.

Dernier petit point : dommage de limiter le titre à la seule accélération alors que ce script semble faire bien plus.
Baraguiné par codegrabber le 13/01/11 à 11h31
codegrabber sur La Ferme du Web
Bonjour,

très bonne mise en avant pour ce script que j'utilise personnellement.
c'est un très bon script qui regorge d'astuces très intéressantes.
les gains en perfs sont notables, quant à l'utilisation des css conditionnelles directement dans la feuille de style c'est top, pour les navigateurs ou pour les résolutions d'ailleurs.

sinon pour moi l'avantage aussi est de pouvoir suivant les pages services d'un site (n'exécutant pas toutes les mêmes scripts js), de pouvoir faire en une seule ligne la sélection des scripts qui vont être chargés, alors qu'avant, je faisais autant de lignes "script" que de scripts, c'était très lourd dans la page et fastidieux à modifier.

Helios > quel est le problème dans le fait que les scripts s'excécutent après le chargement ? c'est déjà le cas avec jquery quand tu fais un document.ready, il n'y a aucune nouveauté la dedans ;)
Mike1310 > tente le coup avec un gros site avec une vingtaine de scripts non combinés, tu vas voir la différence...
Baraguiné par Helios le 13/01/11 à 16h18
Helios sur La Ferme du Web
@Codegrabber : Il n'y a pas de problème au fait que le code s'exécute à la fin du chargement complet (JS compris), heureusement d'ailleurs sinon le code serait instable (bibliothèques potentiellement non chargées ou incomplètes), c'est l'exemple donné qui tend à faire penser le contraire : "utiliser jQuery dans le coprs de la page, même si la librairie n'est pas encore incluse".
Ce que je ne vois pas (ou ne voyais pas) avec cet exemple, c'est l'intérêt qu'il peut y avoir à mettre du code dans le corps de la page, en rompant la séparation HTML/JS, plutôt qu'après l'inclusion de la librairie.

Mais après consultation de la page officielle et en réfléchissant un peu, je comprend mieux l'intérêt, notamment avec des systèmes de templates imbriqués.
Baraguiné par Teenage le 14/01/11 à 13h58
Teenage sur La Ferme du Web
En parlant de css conditionelle, je viens de tomber sur Sass (http://sass-lang.com/, un méta-language de feuille de style, qui permet entre autre l'utilisation de variable et l'imbrication des styles
Baraguiné par mathrobin le 16/03/11 à 17h24
mathrobin via Twitter
Salut!

J'ai fait quelques tests de performances. Je suis assez déçu par les résultats obtenus. J'ai publié mes résultats sur mon blog pour ceux que ça intéresse :
http://www.mathieurobin.com/2011/03/head-js-le-script-qui-charge-vos-scripts-plus-vite-ou-pas/

Bonne journée (et merci la ferme pour le boulot abattu, toujours un plaisir de vous lire)

Ajouter un Commentaire

Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:

Compte la Ferme du Web

Identifiez-vous
Inscrivez-vous

Compte Facebook

Compte Twitter

Connexion avec votre compte twitter
Rechercher sur la Ferme du web