S'il vous plaît noter que cette question est destinée à être un peu plus sur le côté de la théorie du sujet, mais en plus de l'espace de décapage quelles autres techniques sont utilisées pour JavaScript Compression?Quelles techniques les bibliothèques de compression JavaScript utilisent-elles pour réduire la taille du fichier?
Répondre
La plupart des compresseurs utilisent une combinaison de différentes techniques:
- décapage
- espaces blancs fichier par compress algorythme de compression (gzip, dégonfler)
- la majeure partie de l'espace est enregistré renommant les variables interall et fonction à des noms plus courts, par exemple:
Cette fonction:
function func (variable) {
var temp = 2 * variable;
return temp;
}
deviendra:
function func (a) {
var b = 2 * a;
return b;
}
- Dean Edwards packer utilise une compression interne. Le script est décompressé lorsqu'il est chargé sur la page.
- Tous les trucs habituels pour faire une programmcode plus courte:
- supprimer le code utilisé
- fonction inline
Je ne peux nommer que quelques-uns qui se trouvent dans Google Web compilateur Toolkit:
- Inline appels de méthode
- Mort Code de l'élimination
- renommage/source obscurcissement
- cela signifie la réécriture variables longues à courtes et ainsi de suite
La quasi-totalité d'entre eux nécessite l'analyse Javascript (c'est-à-dire qu'ils travaillent au-delà d'une analyse lexicale pure).
Cette partie de code mort me fait peur, comment GWT ne sait que le code est mort quand JS a une portée mondiale? Ou GWT est-il conçu pour compiler tous vos JS à la fois, et ne fonctionne pas si vous l'exécutez sur un seul de vos fichiers JS multiples? –
GWT est un compilateur monolithique, donc en ajoutant quelques restrictions à ce que vous pouvez faire dans java, il peut déterminer avec précision si une méthode est appelée ou non (similaire à ce que vous pouvez faire avec eclipse ide). –
Du haut de ma tête ...
- Tokenizes variables locales et les renomme à une variable de taille minimale.
- Supprime des tonnes d'espaces.
- Supprime les accolades inutiles (par exemple, les exécutions sur une seule ligne après que les instructions if peuvent supprimer des accolades et ajouter un seul point-virgule).
- Supprime les points-virgules inutiles (par exemple, juste avant une accolade de fin '}').
Mon minifier le plus couramment utilisé est le YUI Compressor et as they state, il est open source afin que vous puissiez jeter un oeil pour vous-même exactement ce qu'ils font. (Je ne sais pas ce qu'ils veulent dire par « micro-optimisations », probablement un tas de rares cas que vous gagnez un caractère ou deux.)
et réordonnancement de sorte que le compresseur gzip aura un meilleur résultat.
par exemple (pas si intelligent)
Code d'origine:
function mul(mul1, mul2)
{
return mul1 * mul2;
}
function print(str)
{
// do something
}
function add(add1, add2)
{
return add1 + add2;
}
modifier le code:
function mul(a,b)
{
return a * b;
}
function add(a, b)
{
return a + b;
}
function print(str)
{
// do something
}
Deviendra: fonction f (a) {return 2 * a;};) de 72 caractères à 27 –
si vous voulez utiliser func sur la portée globale javascript je laisserais le nom tel quel ... ;-) – TheHippo