2009-04-08 5 views

Répondre

1

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
+0

Deviendra: fonction f (a) {return 2 * a;};) de 72 caractères à 27 –

+0

si vous voulez utiliser func sur la portée globale javascript je laisserais le nom tel quel ... ;-) – TheHippo

0

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).

+0

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? –

+0

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). –

1

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.)

0
changement de nom de code

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 
} 
+0

Je n'ai pas voté cette réponse car vous n'avez pas vraiment répondu à la question, à savoir quelles * techniques * sont utilisées. – rjzii

+0

désolé Rob, je n'ai pas lu toute la question. Nouvelle réponse, j'espère faire mieux cette fois :) –

+0

@Shay - Oui c'est mieux. – rjzii

Questions connexes