Most, hogy már csak egy-egy állományt kell kiszolgálnunk, és a klienseknek letölteni, akár tovább is léphetünk. Tömörítsünk az összefűzött kódon. Második lépés tehát a JavaScript kód tömörítése. Én erre a feladatra a JavaScriptPacker-t ajánlom. Használata pofon egyszerű:
$in = file_get_contents( 'my.js' );
require_once( 'class.JavaScriptPacker.php' );
$packer = new JavaScriptPacker($in, 62, true, false);
$out = $packer->pack();
file_put_contents( 'my.compressed.js', $out );
Felhasználva ezt a pici kódot kicsit átalakítjuk a már meglévő függvényünket
function headerFiles( array $files, $mode, $fileType, $prefix, $compress = 62 ) {
if ( count( $files ) > 0) {
if ( $mode == 'list' ) {
foreach ( $files as $f ) {
if ( $fileType == 'css' ) {
echo '<link rel="stylesheet" type="text/css" href="'. $prefix.$f.'" />';
}
elseif ( $fileType == 'script' ) {
echo '<script type="text/javascript" src="'. $prefix.$f.'"></script>';
}
}
}
elseif ( $mode == 'one' ) {
$dirname = dirname($_SERVER['SCRIPT_FILENAME']);
$extension = $fileType == 'script' ? 'js' : 'css';
$Hashes = array();
foreach ( $files as $f ) {
$Hashes[] = sha1_file( $dirname.$f );
}
$name = sha1( join(';#%#;', $Hashes) );
$fileName = "{$dirname}/public/cache/{$name}.{$extension}";
if ( !is_file( $fileName ) ) {
$Content = '';
foreach ( $files as $f ) {
if ( is_file( $dirname.$f ) ) {
$Content .= "/*START file: {$f}*/\n";
$Content .= file_get_contents( $dirname.$f );í
$Content .= "\n/*//END file: {$f}*/\n";
}
}
if ( $fileType == 'script' && $compress > 0 ) {
require_once( 'class.JavaScriptPacker.php' );
$packer = new JavaScriptPacker($Content, $compress, true, false);
$Content = $packer->pack();
}
file_put_contents( $fileName, $Content );
}
headerFiles( array( "/public/cache/{$name}.{$extension}" ), 'list', $fileType, $prefix );
}
}
}
A függvényünk, kapott egy plusz paramétert, amivel beállíthatjuk a tömörítés mértékét. Ugyanúgy összeszedjük, és összefűzzük az állományok tartalmát, de ha script
-ekkel dolgozunk, és a tömörítés mértéke nagyobb mint nulla, akkor a kírandó tartalmat tömörítjük.