0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 3003 Просмотров
*

PTTVDesign

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
  • interbuyer
Gzip вывод CSS, JS
« : 09.12.2007, 10:48:19 »
вот хотел предложить вывод CSS, JS посредством сжатия GZIP

template_css.php:
<?php
@error_reporting(0);
require_once("/home/penzin/public_html/honda24/templates/honda24/zip.php");

initGzip_quik();
header('Content-Type: text/css; charset: UTF-8');
header('Cache-Control: must-revalidate');

$expire_offset = 0; // set to a reaonable interval, say 3600 (1 hr)
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expire_offset) . ' GMT');

function css_compress($buffer) {
  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);// remove comments
  $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  '), '', $buffer);// remove tabs, spaces, newlines, etc.
  $buffer = str_replace('{ ', '{', $buffer);// remove unnecessary spaces.
  $buffer = str_replace(' }', '}', $buffer);
  $buffer = str_replace('; ', ';', $buffer);
  $buffer = str_replace(', ', ',', $buffer);
  $buffer = str_replace(' {', '{', $buffer);
  $buffer = str_replace('} ', '}', $buffer);
  $buffer = str_replace(': ', ':', $buffer);
  $buffer = str_replace(' ,', ',', $buffer);
  $buffer = str_replace(' ;', ';', $buffer);
  $buffer = str_replace(';}', '}', $buffer);
  return $buffer;
}

function dump_css_cache($filename) {
  $cwd = getcwd() . DIRECTORY_SEPARATOR;

  $stat = stat($filename);
  $current_cache = $cwd . '_optimize_' . $filename;

  // the cache exists - just dump it
  if (is_file($current_cache)) {
    include($current_cache);
    return;
  }

  // remove any old, lingering caches for this file
  if ($dead_files = glob($cwd . '_optimize_' . $filename, GLOB_NOESCAPE))
    foreach ($dead_files as $dead_file)
      unlink($dead_file);
 
  if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $contents) {
      $handle = fopen($filename, 'w');
      fwrite($handle, $contents);
      fclose($handle);
    }
  }
 
  $cache_contents = css_compress(file_get_contents($filename));
  file_put_contents($current_cache, $cache_contents);
  echo $cache_contents;
}

dump_css_cache('template_css.css');
doGzip_quik();
?>


zip.php:
<?
/**
* Initialise GZIP
*/
function initGzip_quik() {
        global $mosConfig_gzip, $do_gzip_compress;

        $do_gzip_compress = FALSE;
                $phpver = phpversion();
                $useragent = $_SERVER['HTTP_USER_AGENT'];
                $canZip = $_SERVER['HTTP_ACCEPT_ENCODING'];

      $gzip_check    = 0;
      $zlib_check    = 0;
      $gz_check      = 0;
      $zlibO_check   = 0;
      $sid_check      = 0;
      if ( strpos( $canZip, 'gzip' ) !== false) {
         $gzip_check = 1;
      }
      if ( extension_loaded( 'zlib' ) ) {
         $zlib_check = 1;
      }
      if ( function_exists('ob_gzhandler') ) {
         $gz_check = 1;
      }
      if ( ini_get('zlib.output_compression') ) {
         $zlibO_check = 1;
      }
      if ( ini_get('session.use_trans_sid') ) {
         $sid_check = 1;
      }

      if ( $phpver >= '4.0.4pl1' && ( strpos($useragent,'compatible') !== false || strpos($useragent,'Gecko')   !== false ) ) {
         // Check for gzip header or northon internet securities or session.use_trans_sid
         if ( ( $gzip_check || isset( $_SERVER['---------------']) ) && $zlib_check && $gz_check && !$zlibO_check && !$sid_check ) {
                                // You cannot specify additional output handlers if
                                // zlib.output_compression is activated here
            ob_start( 'ob_gzhandler' );
                                return;
                        }
                } else if ( $phpver > '4.0' ) {
         if ( $gzip_check ) {
            if ( $zlib_check ) {
                                        $do_gzip_compress = TRUE;
                                        ob_start();
                                        ob_implicit_flush(0);

                                        header( 'Content-Encoding: gzip' );
                                        return;
                                }
                        }
                }

        ob_start();
}

/**
* Perform GZIP
*/
function doGzip_quik() {
        global $do_gzip_compress;
        if ( $do_gzip_compress ) {
                /**
                *Borrowed from php.net!
                */
                $gzip_contents = ob_get_contents();
                ob_end_clean();

                $gzip_size = strlen($gzip_contents);
                $gzip_crc = crc32($gzip_contents);

                $gzip_contents = gzcompress($gzip_contents, 9);
                $gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);

                echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
                echo $gzip_contents;
                echo pack('V', $gzip_crc);
                echo pack('V', $gzip_size);
        } else {
                ob_end_flush();
        }
}
?>


генерируется _optimize_template_css.css на тут случай если бруизер не поддерживает CSS как PHP (Firefox)
можно сначала вызвать template_css.php
а потом использовать _optimize_template_css.css
« Последнее редактирование: 09.12.2007, 15:36:09 от PTTVDesign »
*

PTTVDesign

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
  • interbuyer
Re: Gzip вывод CSS, JS
« Ответ #1 : 09.12.2007, 10:49:06 »
В ie работает в firefox нет )
не знаю в чем проблема, спецы посмотрите. Подскажите.
*

archer1981

  • Захожу иногда
  • 285
  • 13 / 0
Re: Gzip вывод CSS, JS
« Ответ #2 : 09.12.2007, 11:50:39 »
Это даёт сжатый трафик? А сам этот модуль сколько весит?
http://walkspb.ru - Энциклопедия Санкт-Петербурга
*

Dead Krolik

  • Захожу иногда
  • 131
  • 33 / 4
  • Теперь я рыбка
Re: Gzip вывод CSS, JS
« Ответ #3 : 09.12.2007, 14:25:18 »
Не все браузеры такое умеют. Так бы уже давно все сжимали.
*

PTTVDesign

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
  • interbuyer
Re: Gzip вывод CSS, JS
« Ответ #4 : 09.12.2007, 15:23:07 »
Это даёт сжатый трафик? А сам этот модуль сколько весит?
это не модуль. эту писанину делал для себя.
трафик = убери лишние пробелы, табуляции, комментарии, лишний мусор + сожми это всё ZIP и получишь экономию
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla, вывод полного пути к страницам

Автор rodic

Ответов: 2
Просмотров: 3188
Последний ответ 25.09.2011, 19:10:35
от rodic
Стоит ли использовать gzip страниц?

Автор mijsvit

Ответов: 5
Просмотров: 4586
Последний ответ 03.11.2010, 00:59:41
от Ecspert
Вывод статичного текста в разных разделах

Автор Flanker

Ответов: 1
Просмотров: 2242
Последний ответ 15.06.2009, 17:35:36
от beliyadm
Как убрать автоматический вывод мета тегов в джумле

Автор nick22300

Ответов: 1
Просмотров: 3802
Последний ответ 21.04.2009, 11:23:13
от Sulpher
Вывод ссылок

Автор gamer

Ответов: 8
Просмотров: 2878
Последний ответ 03.01.2009, 02:09:00
от temniy