skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

dimanche 10 octobre 2010

3 façons de charger une librairie JavaScript populaire

Publié par Infinite Loop, à 21 h 17 1 commentaire

En règle générale, chaque fois que j'ai à utiliser une librairie JavaScript, je télécharge la dernière version du composant et je la dépose dans l'arborescence du projet (en milieu professionnel, nous créons une référence pour que le fichier puisse être partagé dans n'importe quel projet et pour faciliter le processus de mise à jour). La copie locale demeure la façon de faire la plus répandue chez les programmeurs web. Même si elle demande un peu plus d'efforts, elle apporte la certitude d'avoir le contrôle absolu sur la librairie. D'autres préféreront la simplicité de charger un script externe sur demande, même si ça peut comprendre certains inconvénients. Explorons les alternatives pour inclure une librairie JavaScript populaire à un projet web (jQuery, Prototype, Scriptaculous, YUI, Dojo, MooTools, etc).

1. Télécharger une copie de la librairie et la placer sur votre serveur

Ici, c'est votre responsabilité de maintenir les librairies en téléchargeant manuellement les nouvelles versions qui sont lancées (bug fixes, nouvelles fonctionnalités, compatibilité de fureteurs, etc). Un avantage est de pouvoir compresser vous-même les librairies, les empaqueter en un fichier unique pour pouvoir minimiser les requêtes HTTP et accélérer le téléchargement des ressources et l'affichage du contenu.

<script type="text/javascript" src="/js/jquery-1.4.min.js"></script>
Sur une page vide, j'ai testé le temps de chargement de chaque type d'inclusion. Dans ce cas-ci, YSlow indiquait :

Score : 96, Grade A
Temps de chargement : 0,258 seconde

La note n'est pas parfaite car je n'ai pas pris le temps d'optimiser ces éléments sur mon serveur de développement :

B : Add Expires headers
B : Compress components with gzip

2. Service de distribution externe

C'est l'équivalent d'inclure un fichier local sauf que plutôt d'être hébergé sur votre serveur, il se trouve sur un serveur externe auquel vous avez confiance, par exemple le service offert par Google Libraries API.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
YSlow score : 99, Grade A
Temps de chargement :0,292 seconde

Le temps de chargement est rapide et les librairies sont optimisées convenablement mais chaque script nécessitera une requête HTTP sur le serveur, ce qui rend impossible d'empaquetage groupé des fichiers. Les scripts cross-sites ne pourront pas fonctionner sur un intranet web offline (reposant sur la technologie web sans toutefois avoir un accès externe).

Le bon fonctionnement est aussi dépendant de la disponibilité du service, ce qui rendrait le site inutilisable si le serveur distant est en panne. Si le service est fourni par un géant comme Google, le risque est faible, sauf en cas d'attaques par les chinois ! Certains craindront aussi la brèche XSS possible si le serveur distant est attaqué.

3. Par le loader de Google AJAX Libraries API

Plutôt que de lier directement chaque script par le service de distribution, on peut utiliser le chargeur prévu à cet effet. Une librairie principale (loader) récupérera elle-même chaque librairie demandée. Google suggère d'obtenir une clé (gratuite) pour avoir accès à certaines librairies, comme Google Maps par exemple.
<script type="text/javascript" src="http://www.google.com/jsapi?key=VOTRE-CLE"></script>
<script type="text/javascript">
google.load("jquery", "1.4.2");
</script>
YSlow score : 95, Grade A
Temps de chargement :0,395 seconde

Le script de chargement demandera 5.4 kb supplémentaires à charger et rend le temps d'exécution légèrement plus lent.

C : Use a Content Delivery Network (CDN)
B : Add Expires headers
B : Compress components with gzip

YSlow suggère parfois de mettre les scripts le plus près possible de la balise de fermeture du BODY plutôt que dans le HEAD pour que la page s'affiche le plus rapidement. Un problème courant est que si l'utilisateur voit apparaître le contenu de la page en premier et qu'un des composants JavaScript soit plus lent que les autres à charger, les événements JavaScript ne seront pas initialisés immédiatement, ce qui pourrait laisser croire à un mauvais fonctionnement des contrôles qui n'auraient aucune réaction au moment de les utiliser (par exemple, un bouton ayant un événement attaché par JS). Personnellement, je préfère les laisser en entête, quitte à ce que ça soit plus long au premier chargement. De toute façon, les scripts iront immédiatement dans la cache du fureteur.


Tags: JavaScript

1 réponse à "3 façons de charger une librairie JavaScript populaire"

  1. Anonyme a dit...
    17 février 2011 à 04 h 36

    ça fait chier ces webdesigner qui nous colle du helvetica en premier choix dans le corps de texte : c'est peut etre très joli sur un petit mac, mais sur pc, le lissage de la police est moche!


Publier un commentaire

Message plus récent Messages plus anciens Accueil
S'abonner à : Publier des commentaires (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (56)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ▼  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ▼  octobre 2010 (32)
        • On est tous des attention whores
        • Citation no. 105 sur le cannibalisme
        • Réseaux sans fil de mes voisins
        • Piège JavaScript no. 7
        • Piège JavaScript no. 6
        • Piège JavaScript no. 5
        • Le plus vieil homme du monde avait 174 ans
        • Détruire le web, un site à la fois
        • Citation no. 104 sur la vie
        • Parce que vous n'avez pas eu le temps de tout voir...
        • Piège JavaScript no. 4
        • Piège JavaScript no. 3
        • Piège JavaScript no. 2
        • Quelques pièges JavaScript
        • Citation no. 103 sur le déjeuner
        • Quand le heavy metal ne se prend pas au sérieux
        • 23 sites pour explorer le HTML5
        • Jouer à Snake sur un vidéo YouTube
        • Faire du son par programmation C++, partie 2
        • Le secret de l'inclinaison de la tour de Pise
        • Barre de progression HTML5
        • 3 façons de charger une librairie JavaScript popul...
        • Citation no. 102 sur les discussions
        • Composer de la musique par programmation avec C++
        • Outlook en mode sans échec qui ne répond pas
        • La tête du banquet de Salomé
        • La disparition de la lettre E
        • Paradis sur mesure
        • Éviter de perdre le contenu rédigé sur le web, rev...
        • Le stockage local HTML5 remplacera-t-il les cookies ?
        • Citation no. 101 sur les mets chinois
        • Où il est question de Bandcamp, Unwoman et d'une p...
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (430)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (37)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft