From 0cca2f6b0e85435b1942f7e44fdd6568ec780da4 Mon Sep 17 00:00:00 2001 From: Fernando Ontiveros Date: Fri, 25 Feb 2011 22:04:56 +0000 Subject: [PATCH] improving css bandwidth usage, now all css files are coming in one file --- gulliver/system/class.g.php | 150 +++++++++++++++++++----- gulliver/system/class.headPublisher.php | 7 +- workflow/engine/skins/extJs.php | 3 +- 3 files changed, 124 insertions(+), 36 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 288652cb3..ee147830b 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -970,6 +970,116 @@ class G } } + /** + * streaming a big JS file with small js files + * + * @author Fernando Ontiveros Lira + * @access public + * @param string $file + * @param boolean $download + * @param string $downloadFileName + * @return string + */ + function streamCSSBigFile( $filename ) + { + header('Content-Type: text/javascript'); + + //if userAgent (BROWSER) is MSIE we need special headers to avoid MSIE behaivor. + $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); + if ( file_exists($filename) ) + $mtime = filemtime($filename); + else + $mtime = date('U'); + $gmt_mtime = gmdate("D, d M Y H:i:s", $mtime ) . " GMT"; + header('Pragma: cache'); + header('ETag: "' . md5 ($mtime . $filename ) . '"' ); + header("Last-Modified: " . $gmt_mtime ); + header('Cache-Control: public'); + header("Expires: " . gmdate("D, d M Y H:i:s", time () + 30*60*60*24 ) . " GMT"); //1 month + if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ) { + if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime) { + header('HTTP/1.1 304 Not Modified'); + exit(); + } + } + + if ( isset($_SERVER['HTTP_IF_NONE_MATCH'])) { + if ( str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5( $mtime . $filename)) { + header("HTTP/1.1 304 Not Modified"); + exit(); + } + } + + $extJsSkin = 'xtheme-gray'; + $publicExtPath = PATH_HTML . 'skins' . PATH_SEP . 'ext' . PATH_SEP; + $output = "/* css autogenerated by gulliver framework for $filename skin **/\n"; + + $output .= file_get_contents ( $publicExtPath . 'ext-all-notheme.css' ); + $output .= file_get_contents ( $publicExtPath . $extJsSkin . '.css' ); + $output .= file_get_contents ( $publicExtPath . 'pmos-' . $extJsSkin . '.css' ); + + //adding the extend css for extjs-pmos + $cssThemeExtensions = glob(PATH_TPL . "*/css/extjs-extend/{$extJsSkin}.css"); + foreach($cssThemeExtensions as $cssThemeExtensionFile) + //$helper->addFile($cssThemeExtensionFile); + $output .= file_get_contents ( $cssThemeExtensionFile ); + + + //new interactive css decorator + //$script .= " \n"; + + $output .= file_get_contents ( PATH_HTML . 'images/icons_silk/sprite.css' ); + + return $output; + } + + /** + * streaming a big JS file with small js files + * + * @author Fernando Ontiveros Lira + * @access public + * @param string $file + * @param boolean $download + * @param string $downloadFileName + * @return string + */ + function streamJSTranslationFile( $filename, $locale = 'en' ) + { + header('Content-Type: text/javascript'); + + //if userAgent (BROWSER) is MSIE we need special headers to avoid MSIE behaivor. + $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); + if ( file_exists($filename) ) + $mtime = filemtime($filename); + else + $mtime = date('U'); + $gmt_mtime = gmdate("D, d M Y H:i:s", $mtime ) . " GMT"; + header('Pragma: cache'); + header('ETag: "' . md5 ($mtime . $filename ) . '"' ); + header("Last-Modified: " . $gmt_mtime ); + header('Cache-Control: public'); + header("Expires: " . gmdate("D, d M Y H:i:s", time () + 30*60*60*24 ) . " GMT"); //1 month + if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ) { + if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime) { + header('HTTP/1.1 304 Not Modified'); + exit(); + } + } + + if ( isset($_SERVER['HTTP_IF_NONE_MATCH'])) { + if ( str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5( $mtime . $filename)) { + header("HTTP/1.1 304 Not Modified"); + exit(); + } + } + + $output = ''; + G::LoadTranslationObject($locale); + global $translation; + $output .= JSMin::minify ( 'var TRANSLATIONS = ' . G::json_encode($translation) . ';' ); + return $output; + } + /** * streaming a file * @@ -983,45 +1093,21 @@ class G function streamFile( $file, $download = false, $downloadFileName = '' ) { require_once (PATH_THIRDPARTY . 'jsmin/jsmin.php'); + $folderarray = explode ( '/', $file ); $typearray = explode ( '.', basename( $file) ); $typefile = $typearray[ count($typearray) -1 ]; $filename = $file; //trick to generate the translation.language.js file , merging two files and then minified the content. if ( strtolower ($typefile ) == 'js' && $typearray[0] == 'translation' ) { - header('Content-Type: text/javascript'); + $output = G::streamJSTranslationFile ($filename, $typearray[1]); + print $output; + return; + } - //if userAgent (BROWSER) is MSIE we need special headers to avoid MSIE behaivor. - $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); - if ( file_exists($filename) ) - $mtime = filemtime($filename); - else - $mtime = date('U'); - $gmt_mtime = gmdate("D, d M Y H:i:s", $mtime ) . " GMT"; - header('Pragma: cache'); - header('ETag: "' . md5 ($mtime . $filename ) . '"' ); - header("Last-Modified: " . $gmt_mtime ); - header('Cache-Control: public'); - header("Expires: " . gmdate("D, d M Y H:i:s", time () + 30*60*60*24 ) . " GMT"); //1 month - if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ) { - if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime) { - header('HTTP/1.1 304 Not Modified'); - exit(); - } - } - - if ( isset($_SERVER['HTTP_IF_NONE_MATCH'])) { - if ( str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5( $mtime . $filename)) { - header("HTTP/1.1 304 Not Modified"); - exit(); - } - } - - $output = ''; - $locale = $typearray[1]; //here we have the language , for example translation.en.js - G::LoadTranslationObject($locale); - global $translation; - $output .= JSMin::minify ( 'var TRANSLATIONS = ' . G::json_encode($translation) . ';' ); + //trick to generate the big css file for ext style . + if ( strtolower ($typefile ) == 'css' && $folderarray[count($folderarray)-2] == 'css' ) { + $output = G::streamCSSBigFile( $typearray[0] ); print $output; return; } diff --git a/gulliver/system/class.headPublisher.php b/gulliver/system/class.headPublisher.php index 13a7f888e..790bc2784 100644 --- a/gulliver/system/class.headPublisher.php +++ b/gulliver/system/class.headPublisher.php @@ -297,8 +297,9 @@ class headPublisher { } function getExtJsStylesheets(){ - - $script = " \n"; + $script = " \n"; +/* + $script .= " \n"; $script .= " \n"; //