J'ai regardé sur quelques grands sites, mais jamais le code compressé ne l'est à ce point là (ce script permet de réduire à 38ko la taille du fichier jquery.min.js - 55ko à l'origine). Je me dis qu'il y a peut être une raison à ça. Ma question se résume à ceci :
Un haut niveau de compression peut-il influencer sur les performances du script ?
En fait, eval va surtout pompé des ressources client ...
Car c'est une fonction trèèèèès lourd et déconseillé ...
Maintenant si tu mélange la compression gzip avec ça, toi de ton coté ta du gain en bande passante !
Mais les performances des 2 cotés seront amoindrie ... (gzip : "ralenti" le serveur et eval "ralentis" le client mais au final ça compresse le code !)
Salut,
Je connais eval(), mais ici il n'est utilisé qu'une unique fois (l'interpréteur ne va pas être redémarrer en plein exécution du script), et la chaîne passée en argument est sans risque.
Et là où il y a beaucoup de temps à gagner c'est sur le transfert du fichier. Avec ça je divise la taille du fichier par 2.
J'imagine qu'avec une chaîne comme ça à décompresser, le script mets plus de temps à démarrer, mais je suppose qu'ensuite, l'exécution du script se fait avec les mêmes performances.
Après mesure, j'ai ceci :
Une fois le fichier dans le cache, le script compressé met une dizaine de millisecondes à être prêt, contre une seule pour le non-compressé.
Mais il me semble que ça reste plutôt correct non ?
J'utilise toujours eval pour compresser mes scripts. Par contre je les rassemble dans un seul fichier pour n'avoir qu'un seul eval.
En terme de rapidité de chargement : c'est rapide, no problem : plus rapide à arriver que lent à exécuter, surtout sur des petites connexions0 Par contre je ne connais pas le fonctionnement de cette "décompression" dans les détails.
Est-ce que ça consomme plus de RAM (besoin de stocker le script décompressé plutôt que de simplement le lire) ou est-ce que ça bouffe du CPU ? Je sais pas. Sur mon dernier projet un ami sous Linux m'a dit que l'appli ramait. J'ai repris tout le code sans pouvoir identifier la source. Je lui proposerai de ré-essayer avec la version plus lourde du script pour voir si ça change quelque chose.
Le temps d'avoir la connexion au serveur et d'attendre la réponse t'as plus de la moitié du temps nécessaire à l'obtention de ton script qui est passé. les quelques ms que tu gagnes là tu les perds coté client.
Compresser autant sert a rien, la charge de gzip est négligeable sur un serveur de production et c'est bien plus utile.
Les 10ms en plus que prends le script a s'initialiser coté client ça c'est pas négligeable. Avec eval il doit attendre d'avoir toute la chaine avant de faire quoi que ce soit, si t'as le script en clair la VM peut commencer le travail pendant le téléchargement, donc ça parait moins long.
Sinon faut charger le minimum de JS qui permet d'insérer d'autres scripts qui font le travail, t'y vois que du feu coté client et ça trace pour charger la page.
( edit ) @Geoffrey-Zéro : ça veut pas dire grand chose ta première phrase… eval tout seul ça compresse que dalle.
Le temps d'avoir la connexion au serveur et d'attendre la réponse t'as plus de la moitié du temps nécessaire à l'obtention de ton script qui est passé.
Ha oui c'est ce que j'était en train de voir :
Et en repassant le script en clair, j'ai les mêmes temps...
nod_, tu m'auras compris quand même, on n'est pas là pour faire de la rhétorique...
Après je suis peut-être con/ignare mais pour moi une compression qui utilise eval pour décompresser ou gzip c'est pareil : on a un fichier plus léger que le client décompresse (et parfois mal sur IE6 avec gzip d'après ce que j'ai lu : IE6 commence parfois à parser avant la décompression).
la plupart de mes scripts s'exécutent après le chargement de la page, donc je peux bien attendre 10ms. Et on attend combien de temps avec gzip ?
Après, c'est peut-être parce que les résultats Google pour "gzip" sont peu instructifs, mais j'ai pas eu une illumination en apprenant son existence. Je me suis même dit "bouh c'est encore du boulot pour le serveur".
Après, j'ai pas tout capté de votre discussion, je vole pas aussi haut que vous...
Je l'utilisais avant, mais elle est totalement inutile.
1) elle compresse, certes. mais le but de la compression est de diminuer le temps de chargement. Or sur du gros code, ça le rallonge.
2) l'obfuscation est nulle. Remplace eval par alert ou write, et tout ton code apparait.
Bref, je déconseille.
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
on fait pas de la réthorique mais être précis évite les quiproquos, c'est simplement de la rigeur.
Pour eval/gzip, les routine pour décompresser le gzip sont très certainement en C dans les navigateurs en tous cas sur le serveur c'est certain. T'as pensé aux ressources utilisé par le script php qui compresse le JS ? Là je suis certain que c'est beaucoup plus lent et gourmand qu'un script en C. Donc le temps de décompression sera plus court.
Surtout qu'avec gzip tu compresse tout le texte : HTML, CSS, javascript. et pour que gzip soit utilisé au mieux il faut que les même caractères se répète souvent : avec le script de LCaba, puisqu'on a limite un caractère différent pour chaque fonction ça servira pas à grand chose.
Exemple avec jquery 1.4.2 :
normal : 161k
minifié : 71k
minifié + gzip : 24k
avec le script PHP : 50k !
Gzip, une réduction de 33% sur la taille du fichier à télécharger.
Au final gzip c'est moins hasardeux, plus simple a mettre en œeuvre et appliquable au CSS/HTML. Si tu cherches les performances pour un téléchargement rapide, y'a pas 36 solutions et celle en OP n'en est pas une.
T'as pensé aux ressources utilisé par le script php qui compresse le JS ? Là je suis certain que c'est beaucoup plus lent et gourmand qu'un script en C.
En effet le temps pour compresser se compte en centaines de ms (jusqu'à 400 pour la version hyper-compressée), mais je ne suis pas fou, la compression n'est pas réalisée à chaque fois, mais sauvée dans un fichier .js. Donc cette durée n'est pas à prendre en considération.
Citation : nod_
et pour que gzip soit utilisé au mieux il faut que les même caractères se répète souvent : avec le script de LCaba, puisqu'on a limite un caractère différent pour chaque fonction ça servira pas à grand chose.
Ca ça m'intéresse, tu peux me donner un exemple concret stp ?
PS : Tu ne m'a toujours pas expliciter ta phrase : "Sinon faut charger le minimum de JS qui permet d'insérer d'autres scripts qui font le travail, t'y vois que du feu coté client et ça trace pour charger la page." Je suis avide de savoir
J'suis sous linux donc c'est facile, j'ouvre ma console, je gzip le fichier et je fais un ls -l
, qui me donne la taille des fichiers dans le repertoire.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github