JavaScript

Faut-il minifier une concaténation de code minifié ?

À travers cet article portant fièrement un titre chinois pour les non-initiés au développement web, nous allons voir s'il faut fournir du code minifié à UglifyJS pour qu'il produise son propre code minifié.

La minification pour les nuls :

Chaque développeur web un peu soucieux des performances de son site, va tout d'abord minifier ses scripts JavaScript. Cela consiste à enlever tout ce qui est inutile pour la machine (espaces blancs, commentaires, etc.) mais utile pour l'homme qui confectionne ce code avec amour. Cela permet de réduire la taille des fichiers et d'accélérer le chargement des sites web. De plus il peut les concaténer (les ajouter bout à bout) afin de réduire le nombre de requêtes HTTP ce qui aura pour conséquence d'accélérer encore une fois le chargement du site par le visiteur.

Un petit benchmark

J'ai donc fait un petit script pour mettre tout le monde d'accord : (les librairies choisies sont un pur hasard)

La méthode minify d'Uglify permet de minifier et de "mangler" (raccourcit le nom des variables) le code. Comme je passe un array en argument, il va s'occuper de concaténer tous les scripts tout seul comme un grand pour ne donner qu'un seul fichier.

Et en output, j'obtiens donc :

1
Compressed: 728144 / Uncompressed: 738180 | 0.986% (40.2s)
WTF!? Je m'attendais à une différence négligeable mais, en faveur du non compressé. Or ici Uglify produit un code plus court si on lui fournit du code minifié. C'est...étrange...

Bref vous avez perdu votre temps à lire ça ;-)

Le résultat est à mon goût négligeable donc inutile de changer vos pratiques. De plus il est fort probable que ce résultat varie en fonction des cas.

Rassurez vous, je ne suis pas encore assez fou pour avoir ce genre d'idée seul, remercions plutôt @nhoizey : (et @madsgraphics pour ses suppositions)
tweet de nhoizey

Sinon j'aimerais ajouter que je n'ai aucune idée du pourquoi de ce résultat, donc si vous avez envie d'exposer vos suppositions au reste du monde dans les commentaires, n'hésitez pas. :-)

Node.js pour les nuls

Dans cet article je vais vous proposer une petite initiation à Node.js. C'est vrai que trouver toutes les ressources nécessaires lorsque l'on débute n'est pas forcément facile. Il est préférable d'avoir quelques connaissances en JavaScript pour lire cet article. Dans le cas contraire, je vous invite à suivre cet excellent tutoriel : Dynamisez votre site web avec Javascript !.

Introduction

NodeJS est un programme qui va vous permettre de coder en JavaScript côté serveur. Il est basé sur V8, le moteur JS de Google Chrome. Notons que ses input/output sont asynchrones. Cela signifie que lorsque par exemple vous voudrez lire un fichier du disque dur, vous direz à votre programme « Hey lis moi ça et rappelle moi quand tu as finis », pendant ce temps-là celui-ci continuera de gérer les autres requêtes etc. Imaginons que lorsque vous devez délivrer une page, celle-ci nécessite deux requêtes SQL de 300ms chacune et lire un fichier txt (100ms), avec PHP vous auriez dû faire une requête SQL (500ms), puis une autre (500ms), puis lire le fichier txt (100ms). Votre serveur aurait mis 1100ms à rendre la page. Et bien là avec NodeJS vous demandez tout en même temps et vous renvoyez la page lorsque les opérations sont finies. Votre page sera renvoyée en 500ms (temps de l'opération la plus longue). Vous vous demanderez bientôt comment vous faisiez avant ;-) Cependant, si vous en avez besoin, vous pouvez parfaitement lancer ces mêmes fonctions en synchrones.

Une autre chose à savoir si vous venez de PHP, c'est que Node.js est aussi un serveur HTTP. Lorsque vous programmez avec PHP, vous avez besoin d'apache pour gérer les requêtes HTTP. Et bien là plus besoin d'Apache, NodeJS gère aussi les requêtes HTTP comme un grand. Pour votre culture générale, sachez qu'en production, beaucoup de gros sites utilisent nginx ou apache comme proxy par-dessus.

Les indispensables

  • NPM Une des plus grandes forces de Node.js : NPM. C'est un système de paquets où de nombreux développeurs ajoutent des modules prêts à l'emploi. Le nombre de module est vraiment énorme, c'est une vraie mine d'or. Cela vous évitera de nombreuses nuits à coder des choses déjà codées par d'autres. Vous voulez récupérer la météo de Google ? Paf une recherche et vous avez un module tout fait qui vous propose une API simpliste.
  • Express Le serveur web le plus connu. Relativement simpliste, il reste néanmoins puissant.
  • socket.io Pour faire du real-time cross-browser entre votre serveur et vos clients.
  • Async Pour gérer un grand nombre de tâches asynchrones en simultanées.

Sites pour apprendres

Autres

Comme je l'ai dit précédemment, un gros atout de Node est son système de modules. N'hésitez jamais avant de coder quelque chose si quelqu'un ne l'a pas fait avant vous.

Vous pouvez utiliser avec Node.js n'importe quel système de base de données ; MySQL, ProstrgreSQL, MongoDB, CouchDB, Redis, et pleins d'autres. Vous trouverez les drivers pour les utiliser sur NPM.

Bref je ferais sûrement d'autres articles dessus pour vous en parler. Si vous avez des questions, n'hésitez pas à laisser un petit commentaire. Vous pouvez aussi me suivre sur Twitter, je fais quotidiennement ma petite veille en vous partageant les liens les plus intéressants.