Долго грузится сайт

нужно исправить

#31 17 декабря 2011 в 02:38
Очень грамотный человек в свое время написал хороший скрипт. Скрипт для сжатия загружаемых пользователем JS и CSS файлов.
Гринкевич Евгений Вадимович.
К сожалению его сайт канул в лету, но так сказать, дела живут. Очень полезная штука и работает на ура. На основе её сделаны плагины к вп и другим движкам. А все очень просто.
В корне создаем файлик jscss.php с таким вот содержанием.

  1. <?
  2. /* /*
  3.  
  4. Скрипт для сжатия загружаемых пользователем JS и CSS файлов.
  5.  
  6.  
  7. Автор: Гринкевич Евгений Вадимович.
  8. Источник: http://www.ewgenij.net/
  9.  
  10. Надеюсь, Вам не нужно объяснять, что интеллектуальная собственность,
  11. это Вам не [eq собачий.
  12.  
  13. /* */
  14.  
  15.  
  16. /* НАСТРОЙКИ */
  17.  
  18. // Куда сохранять сжатые файлы. Поставьте права на запись для каталога.
  19. // Если каталога не существует, он скорее всего будет создан, если
  20. // ничего не перемудрить. Лучше оставить как есть сейчас.
  21. $sCachePath = $_SERVER['DOCUMENT_ROOT'] . '/cache/jscss/';
  22.  
  23. // 0 - не сжимать, 9 - максимальное сжатие.
  24. $iEncodingLevel = 8;
  25.  
  26. // Файлы можно кэшировать и на стороне клиента.
  27. // 60с. * 60м. = 3600c. = 1 час ускоренной работы сайта.
  28. $iExpiresOffset = 3600;
  29.  
  30. /* ######### */
  31.  
  32.  
  33.  
  34.  
  35. // Будьте любезны, дальше ничего не исправляйте самостоятельно :). Спасибо!
  36.  
  37.  
  38. // По умолчанию здесь файл, относитьельно DOCUMENT_ROOT
  39. // не по умолчанию за деньги :)
  40. $sURL = $_SERVER['REQUEST_URI'];
  41. $sDR = $_SERVER['DOCUMENT_ROOT'];
  42.  
  43. if (!file_exists($sDR . $sURL)) // Не найден исходник для кэширования.
  44. die();
  45.  
  46.  
  47. $sCachedName = str_replace('/', '%', $sURL); // Новое имя в кэше
  48. $bGzip = false;
  49. $sEnc = '';
  50.  
  51. $ct = preg_match('/\.css/i', $sURL) ? 'text/css' : 'text/javascript';
  52. header('Content-type: ' . $ct);
  53. header('Vary: Accept-Encoding');
  54. header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $iExpiresOffset) . ' GMT');
  55.  
  56. $sourceFile = $sDR . $sURL;
  57. $date = date('YmdHis', filemtime($sourceFile));
  58. $cacheFile = $sCachePath . $date . '_' . $sCachedName;
  59.  
  60. // если указано, что браузер принимает что-то нестандартное
  61. if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
  62. {
  63. $sEncodings = strtolower($_SERVER['HTTP_ACCEPT_ENCODING']);
  64. if (strpos($sEncodings, 'gzip') !== false)
  65. {
  66. // если дальше все упакуется и не пакуется по умолчанию из-за настроек
  67. if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression'))
  68. {
  69. $bGzip = true;
  70. header('Content-Encoding: gzip');
  71. }
  72. }
  73. }
  74.  
  75.  
  76. if ($bGzip)
  77. {
  78. // если нет кэша (возможно из-за изменения даты модификации файла)
  79. if (!file_exists($cacheFile))
  80. {
  81. // удаляем возможные остатки предыдущих версий
  82. removeOldCache($sCachedName);
  83. // проверяем путь к папке кэша и пакуем
  84. forcePath($sCachePath);
  85. $cacheData = gzencode(getFileContents($sourceFile), $iEncodingLevel, FORCE_GZIP);
  86. putFileContents($cacheFile, $cacheData);
  87. }
  88. // отдаем запакованную версию
  89. echo getFileContents($cacheFile);
  90. die();
  91. }
  92.  
  93. // если дошли до этого места, то gzip скорее всего не поддерживается
  94. echo getFileContents($sourceFile);
  95.  
  96.  
  97.  
  98. /* Внутренние Функции */
  99.  
  100.  
  101. function removeOldCache($sFileName)
  102. {
  103. global $sCachePath;
  104. if ($dir = opendir($sCachePath))
  105. {
  106. while (($file = readdir($dir)) !== false)
  107. {
  108. if (strpos($file, $sFileName) !== false)
  109. @unlink($sCachePath . $file);
  110. }
  111. }
  112. }
  113.  
  114.  
  115. function getFileContents($sFile)
  116. {
  117. $sContent = '';
  118. $fp = @fopen($sFile, 'r');
  119. if (!$fp)
  120. return '';
  121.  
  122. while (!feof($fp))
  123. $sContent .= fgets($fp);
  124.  
  125. fclose($fp);
  126.  
  127. return $sContent;
  128. }
  129.  
  130.  
  131. function putFileContents($sFile, $sContent)
  132. {
  133. $fp = @fopen($sFile, 'wb');
  134. if ($fp)
  135. {
  136. fwrite($fp, $sContent);
  137. fclose($fp);
  138. }
  139. }
  140.  
  141.  
  142. function forcePath($sPath, $chmod = 0755)
  143. {
  144. $dd = explode('/', $sPath);
  145. $p = ''; $r = false;
  146. foreach ($dd as $d) {
  147. $p .= $d . '/';
  148. $r = @mkdir($p);
  149. @chmod($p, $chmod);
  150. }
  151. return $r;
  152. }
  153.  
  154.  
  155.  
  156. ?>
Далее, в корне создаем папку cache, в ней папку jscss, раздаем на них права на запись.
В файл .htaccess добавляем пару строк

  1.  
  2. # JSCSS-Packer.
  3. RewriteRule (\.js)$ jscss.php [L]
  4. RewriteRule (\.css)$ jscss.php [L]
Если ничего не забыл, то начинаем наслаждаться скоростью, так пожали стили и жабу.
Да в папку кеша можно добавить файл .htaccess с таким содержанием
  1. deny from all
Можно добавить в файл .htaccess вот такую штуку, ну тут все понятно.
FileETag MTime Size
<ifmodule mod_expires.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>

По Firebug, с установленным Padge Speed выигрыш очень ощутимый
#32 17 декабря 2011 в 02:42
Время генерации при тесте на loadimpact.com прощёлкал((
page speed было 60/100 стало 75/100 при активном онлайне в 160 юзверей.
Время генерации страницы: 0.0728 сек.
Запросы к базе: 89
это так при нулевом онлайне, но у меня скорость инета щас блин 0.2 Мб
#33 17 декабря 2011 в 02:48
garry, спс, ща потестим
#34 17 декабря 2011 в 03:00
скрипт ещё не тестил, но уже 81/100 Хороший Америкосовский хостинг, блин
#35 17 декабря 2011 в 03:01
Чем удобен этот скрипт, так тем что не грузит сервер, как обсуждаемый тут WEBO.
WEBO хорош( хоть и не весь его функционал заявленный нужен или работает так как надо), но для высоконагруженных проектов и не с одним сервером, там где есть распределение. Ставить его бессмысленно особенно не имея своего сервера, погонят в итоге.
#36 17 декабря 2011 в 04:06
garry, попробовал, ну не хуже-эт точно.
после чистки кеша арбузера первый раз долго(как и все известные сайты), потом летает со свистом.
В админке траблы, каша полная

Убрал с хатацесс те рекомендации, встала на место)) Вобщем, надо дорабатывать этот скрипт))
#37 17 декабря 2011 в 04:09
морда так же летает))) сам сайт(сайт не мой, на заказ)))
#38 17 декабря 2011 в 04:14
Если из за этого
FileETag MTime Size
<ifmodule mod_expires.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>

То это конечно не обязательно, точнее тут надо под свои настройки и тд и тп. Вариантов масса, да и к скрипту оно не относится.
#39 17 декабря 2011 в 04:16
я это в хатацесс не включал, возможно.надо попробовать…
#40 17 декабря 2011 в 04:18
Да конечно траблы возможны, но на основе его можно сделать великолепную штуковину для системы, не грузит и ускоряет.
Плюс возможны траблы из за различных настроек сервера.
Или стоит указать что сжимать, а что нет, или где сжимать, а где нет. Это так ночные мысли и они возможно уже не так ясны smile
Да плюс пара-трешка пива.
#42 17 декабря 2011 в 05:22
Максим, Результат близкий к идеалу.
#43 17 декабря 2011 в 05:33
аг.просто на хостинге сжатие включил.Респект нашим разработчикам.Ну и хостинг Америкосовский как всегда радуент)))
#44 17 декабря 2011 в 05:50
Главное что бы яндексу пустые страницы не отдавались, что бы все было у них настроено не только на гугл, а то...
Если ничего не путаю, то были такие прециденты с америкосовским хостингом
#45 17 декабря 2011 в 06:29
Карту вниз над хостом
Первую строчку думаю лучше так Disallow: /index.php$
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.