In questo modo, stai riducendo sia la leggibilità sia la misura in cui il plugin può essere ridotto.
Prendiamo il tuo esempio della tua stringa HTML ottenendo un file HTML con alcuni tag <div>
. Eseguendo qualche codice di esempio tramite un minificatore, otteniamo 380 byte prima di gzip per il primo: 174
var a="<div>a</div><br><div>bc</div><br><div>def</div><br><div>ghij</div><br><div>klmno</div><br><div>pqrsjt</div><br><div>uvwxyzA</div><br><div>BCDEFGHI</div><br><div>JKLMNOPQR</div><br><div>S</div>",b="<div>T</div><br><div>UV</div><br><div>WXY</div><br><div>Z'12</div><br><div>34567</div><br><div>890-='</div><br><div>!@#$%^*</div><br><div>()_+[]{</div><br><div>}|;':,./</div>";
Per il secondo, otteniamo 347 byte prima di gzip, un leggero miglioramento:
var c='replace',a="<!>a</!><br><!>bc</!><br><!>def</!><br><!>ghij</!><br><!>klmno</!><br><!>pqrsjt</!><br><!>uvwxyzA</!><br><!>BCDEFGHI</!><br><!>JKLMNOPQR</!><br><!>S</!>"[c](/\!/g,"div"),b="<!>T</!><br><!>UV</!><br><!>WXY</!><br><!>Z'12</!><br><!>34567</!><br><!>890-='</!><br><!>!@#$%^*</!><br><!>()_+[]{</!><br><!>}|;':,./?</!>"[c](/\!/g,"div");
Tuttavia, ciò che devi capire è che ciò che è importante la maggior parte delle volte è importante la dimensione del file dopo essere stato gzip, non prima. Questo perché molti server e browser supportano l'invio di file che sono stati compressi in questo modo, riducendo l'utilizzo della larghezza di banda.
Quando compresso, l'algoritmo DEFLATE (ciò che gzip usa per comprimere i file) fa già ciò che dovresti fare manualmente, comunque dovresti avere le dimensioni aggiuntive e la perdita di prestazioni associate al codice sostitutivo. Inoltre, è in grado di riconoscere gli schemi di corde che non sono facili da vedere con il codice normale senza rendere il codice completamente illeggibile.
Con questo esempio, quello che finiamo per trovare è che dopo aver eseguito la compressione su di esso (ho usato Zopfli per testare questo), il primo script in realtà comprime fino a 172 byte, mentre il secondo può essere compresso solo fino a 199 byte, che è peggio. La dichiarazione per var c="replace"
e [c](/\!/g,"div")
occupa byte in sé e dato che gzip pone già le sottorapporti nel file compresso, in realtà aumenta le dimensioni del codice.
Non solo, le prestazioni sono leggermente peggiori perché dovresti sostituire ciascuna di esse durante il runtime, che è peggio del tempo necessario per decomprimere il file gzipp in modo nativo.
In effetti, la maggior parte dei minificatori effettivamente fa l'opposto di quello che hai fatto, in modo che la dimensione gzip venga ridotta. Vedi questa discussione su il gruppo di discussione di Closure Compiler.
Una FAQ per il compilatore di chiusura copre anche questo:
Closure Compiler inlined all my strings, which made my code size bigger. Why did it do that?
Most people compare code size by looking at two uncompressed
JavaScript
files. But that's a misleading way to look at code size, because your
JavaScript
files should not be served uncompressed. It should be served with gzip
compression.
Closure Compiler assumes that you are using gzip compression. If you
do not, you should. Configuring your server to gzip your
code
is one of the most effective and easiest optimizations that you can
possibly do. The gzip algorithm
works by trying to alias sequences of bytes in an optimal way.
Aliasing strings manually almost always makes the compressed code size
bigger, because it subverts gzip's own algorithm for aliasing. So
Closure Compiler will (almost) always inline your strings when it can,
because that will make your compressed code smaller.
If you know your client doesn't support gzip, the Java API has an
aliasAllStrings
option on the
CompilerOptions
class. Turning this on will make the compiler alias all your strings
in the global scope.