Gyorsabb JS és CSS III.

Már elértük, hogy csak egy állományt kell kiszolgálni. Már tömörítettünk a JavaScript kódot is. Következik a CSS kód tömörítése. Szerencsére már erre a feladatra is létezik kész megoldás a CSSTidy formájában. Használata a JS tömörítőhöz hasonlóan egyszerű

$in = file_get_contents( 'my.css' );

require 'class.csstidy.php';
$Css = new csstidy();
$Css->load_template( 'high_compression' );
$Css->parse( $in );

$out = $Css->print->plain();
file_put_contents( 'my.compressed.css', $out );

És a módosítások után a így néz ki a függvényünk:

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' && strval(0) != strval($compress) ) {
                    require_once( 'class.JavaScriptPacker.php' );
                    $packer = new JavaScriptPacker($Content, $compress, true, false);
                    $Content = $packer->pack();
                }
                elseif ( $fileType == 'css' && strval(0) != strval($compress) ) {
                    require 'csstidy/class.csstidy.php';
                    $Css = new csstidy();

                    $Css->set_cfg('remove_bslash', 1 );
                    $Css->set_cfg('compress_colors', 1  );
                    $Css->set_cfg('compress_font-weight', 1 );
                    $Css->set_cfg('optimise_shorthands', 1  );
                    $Css->set_cfg('remove_last_;' , false  );
                    $Css->set_cfg('case_properties' , 1  );
                    $Css->set_cfg('merge_selectors', 2  );
                    $Css->set_cfg('css_level', 'CSS2.1' );

                    if ( $compress == 10 || $compress == 'Numeric' || $compress == 'low_compression' ) {
                        $Css->load_template( 'low_compression' );
                    } elseif ( $compress == 62 || $compress == 'Normal' || $compress == 'high_compression' ) {
                        $Css->load_template( 'high_compression' );
                    } elseif ( $compress == 95 || $compress == 'High ASCII' || $compress == 'highest_compression' ) {
                      $Css->load_template( 'highest_compression' );
                    } else {
                        $Css->load_template( 'default' );
                    }
                    $Css->parse( $Content );
                    $Content = $Css->print->plain();
                }
                file_put_contents( $fileName, $Content );
            }
            headerFiles( array( "/public/cache/{$name}.{$extension}" ), 'list', $fileType, $prefix );
        }
    }
}

One Response to Gyorsabb JS és CSS III.

  1. Pingback: vince.tikasz.hu » Blog Archive » Gyorsabb JavaScript és CSS letöltés