Linux за българи: Форуми

Linux секция за напреднали => Начини за увеличаване на бързодействието => Темата е започната от: abadon в Feb 05, 2010, 13:06



Титла: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 05, 2010, 13:06
Здравейте,

Опитваме се да извлека максимална производителност от моят сайт, за да компенсирам факта че го хоствам на слаба виртуална машинка. До момента съм подкарал:

1) Apache MPM worker ($2)
2) mod_deflatе ($2),
3) ZLIB компресия ($2) в php-то
4) eAccelerator ($2)

Повишението на производителността след прилагането на тези неща е просто колосално над 10 пъти.

Сега обаче искам да сервирам смалени (Minifying) CSS и JS файлове. Според Page Speed-а ($2) ако сервирам css/js файлове на които са премахнати коментарите, ненужните интервали и т.н. ще спестя 56.6kB от JavaScript-а и 3.4kB от CSS-ите или процентно изразено спестявам 27.9% от JS и 13.4% от css.

Затова се интересувам има ли начин Apache-а да се конфигурира така че когато ми дойде заявка за js/css файл той да премахне ненужните глупости от него и тогава да го компресира и изпрати?

Предварително благодаря!


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: VladSun в Feb 05, 2010, 13:58
Нещо такова?
http://search.cpan.org/~gtermars/Apache2-Filter-Minifier-CSS-1.04/lib/Apache2/Filter/Minifier/CSS.pm

Ти всъщност нямаш проблеми с виртуализацията, а с Интернет каналa при теб и при твоите клиенти.


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 05, 2010, 14:29
Да нещо такова ми трябва само че да работи с php, тъй като това виждам че е за perl или греша?

На мен основния ми проблем е с рама тъй като имам едва 512МВ в момента в който той ми свършва и почвам да ползвам слуап CPU-то ми е на 1.5-2%. Идеята ми е че ако пращам по-малко съдържание заявките ми ще се обработват по-бързо, мрежата ще се разтовари от което мисля че за единица време ще мога да обработя повече заявки.


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: VladSun в Feb 05, 2010, 14:42
Не съм го пробвал това чудо как работи, но ми изглежда, че докато самият output filter-a е писaн на Perl, то това няма никакво значение за файловете, които ще обслужва.


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 05, 2010, 14:52
Навярно си прав, но за да работи респективно ще трябва да пусна и perl на апача. Аз до момента не съм правил подобно нещо, като от perl нямам никаква представа. Но си мисля че ако заредя допълнителни модули за perl те ще натоварят повече отколкото ще ми е ползата от смаляването на css-а или се бъркам?


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: VladSun в Feb 05, 2010, 14:59
mod_perl2 чак толкова да натовари ... не ми се вярва.

Освен това би трябвало да ползваш опциите за кеширане.

Това http://developer.yahoo.com/performance/rules.html предполагам си го чел?

Друг вариант е да правиш minifying с PHP в самите страници... но пак ще ти трябва някаква система за кеширане.


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: RealEnder в Feb 05, 2010, 18:23
Според мен повече ще бави, ако в реално време ги минимизира - по-добре си ги обработи предварително css и js с нещо от типа на jsmin или на yahoo
Можеш да използваш и css sprites, за да се отървеш от малките картинки, за които браузърите отварят нови връзки (все още piplining-а не е включен по подразбиране в mainstream браузърите). Добър tool за това тук: http://spriteme.org/


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: VladSun в Feb 05, 2010, 18:34
За това през цялото време "споменавам" кеширането :)


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 08, 2010, 16:06
Според мен повече ще бави, ако в реално време ги минимизира - по-добре си ги обработи предварително css и js с нещо от типа на jsmin или на yahoo
Можеш да използваш и css sprites, за да се отървеш от малките картинки, за които браузърите отварят нови връзки (все още piplining-а не е включен по подразбиране в mainstream браузърите). Добър tool за това тук: http://spriteme.org/

ще го разгледам това за в бъдеще след като си реша предния проблем.


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 08, 2010, 16:16
Намерих този проект Smartoptimizer ($2) Изглежда много лесен за интегриране като има три стъпки за да заработи:
1) Качва му се директорията smartoptimizer в root директорията на сайта
2) Дават се 777 права на smartoptimizer/cache
3) Качва се или се апендва .htaccess файла му към текущия ни htaccess

И всичко трябва да заработи. Обаче при мен нещата не се получават както трябва и браузъра почва да ми бълва грешки от рода на:
Цитат
SmartOptimizer Error: File not found (../$external_c/adult/%b/622/622D9B8F%%form_ForgotPassword.js).

Моята текущ .htaccess е:
Цитат
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ navigation.php

RewriteRule .* - [E=HTTP_X_REQUESTED_WITH:%{HTTP:X-Requested-With}]

# METHOD 1: Add a line to your .htaccess file:
#php_flag zlib.output_compression On

.htaccess на SmartOptimizer-а е:
Цитат
<IfModule mod_expires.c>
   <FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$">
      ExpiresActive On
      ExpiresDefault "access plus 10 years"
   </FilesMatch>
</IfModule>
<IfModule mod_rewrite.c>
   RewriteEngine On
   
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*\.(js|css))$ smartoptimizer/?$1
   
   <IfModule mod_expires.c>
      RewriteCond %{REQUEST_FILENAME} -f
      RewriteRule ^(.*\.(js|css|html?|xml|txt))$ smartoptimizer/?$1
   </IfModule>

   <IfModule !mod_expires.c>
      RewriteCond %{REQUEST_FILENAME} -f
      RewriteRule ^(.*\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt))$ smartoptimizer/?$1
   </IfModule>
</IfModule>
<FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt)$">
   FileETag none
</FilesMatch>

Как трябва да ги комбинирам двата .htaccess за да работят нещата?


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: teh в Feb 08, 2010, 17:42
С AllowOverride пък караш apache-а да прави stat във всяка директория за .htaccess.
Най-чистият вариант е с AllowOverride None и сам да си генерираш/компресираш/обединяваш и т.н. малките css/js като част от development/pre-deployment процеса, от колко да пълниш apache-а с модули които да вършат излишни неща и да хабят повече ресурси.


Тук има още подсказки:
http://httpd.apache.org/docs/2.2/misc/perf-tuning.html


Титла: Re: Смаляване на CSS/JS в Apache
Публикувано от: abadon в Feb 08, 2010, 18:21
С AllowOverride пък караш apache-а да прави stat във всяка директория за .htaccess.
Най-чистият вариант е с AllowOverride None и сам да си генерираш/компресираш/обединяваш и т.н. малките css/js като част от development/pre-deployment процеса, от колко да пълниш apache-а с модули които да вършат излишни неща и да хабят повече ресурси.


Тук има още подсказки:
http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Благодаря. Тези подсказки съм ги чел това с AllowOverride го имам предвид. Но сега докато изчистя конфигурацията ми е по-лесно да тествам с .htaccess файлове отколкото да съм вкарал нещата директно в конфигурацията на Апача и да съм с AllowOverride None. Относно "генерираш/компресираш/обединяваш" мисля, че е по-удачно Apache-то да ми ги прави веднъж, след което ги забие в кеш отколкото аз да си ги правя сам. След което като променя нещо просто си трия кеша и готово. Доста по-бързо става отколкото да се редактира крайно не четим код примерно или поне така смятам.