Оптимизирайте Скороста на Сайта си - Speed Performance

radoslav68

Active Member
Здравейте колеги,

Отварям тази тема защото преди седмица ми се наложи да оптимизирам сайта си, след като получих 4 писма от хостинга за превишаване на процесорното време. Отне ми няколко дни ровене из нета и в крайна сметка получих задоволителен резултат по отношение на скороста на зареждане на сайта ми, което е в резултат на оптимизирането на сървъра - говоря за сървър Apache 2.0 - 2.2, Linux OZ.

По-доло описаните стъпки ще ви спестят главоболия и време, ако хостинг провайдъра не ви е читав и от друга страна сайта ви ще зарежда доста по-бързо. Избрал съм основните неща, които дават ефект и се отнасят най-вече, ако ползвате споделен хостинг план. За прилагането ще ви отнеме не повече от 10-15 мин.

Като за начало тествайте скороста на зареждане на сайта си с тези инструменти:

Yahoo YSlow
Google Page Speed Insight
GTmetrix

Да започнем подобренията!

Отворете .htaccess файла в някой текстови редактор - не забравяйте да си направите копие на файла за всеки случай!

1. Разрешете компресията на файловете

Mod_deflate разрешава файловете да се компресират. Намерете в .htaccess <ifmodule mod_deflate.c> и го заменете с кода по-доло:

Код:
<ifmodule mod_deflate.c>
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</ifmodule>

Една добавка - от cPanel в раздела "Програми и допълнителен софтуер" изберете опцията "Optimize Website".
След това изберете "Compress all content" - вижте скрийн шотовете по-доло.

optimize-1.pngoptimize-2.png

2. Включете Apache модула mod_expires.

Аз тествах около 10 варианта, но този който ви предлагам даде най-добри резултати.

Заменете в .htaccess, кода по-доло

<ifmodule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</ifmodule>

със този код

Код:
<IfModule mod_expires.c>
	############################################
	## Add default Expires header
	## http://developer.yahoo.com/performance/rules.html#expires
	ExpiresActive On
	ExpiresDefault "access plus 1 month"
	ExpiresByType image/jpg "access 1 month"
	ExpiresByType image/jpeg "access 1 month"
	ExpiresByType image/gif "access 1 month"
	ExpiresByType image/png "access 1 month"
	ExpiresByType text/css "access 1 month"
	ExpiresByType application/pdf "access 1 month"
	ExpiresByType text/x-javascript "access 1 month"
	ExpiresByType application/x-shockwave-flash "access 1 month"
	ExpiresByType image/x-icon "access 1 year"
	</IfModule>
	
	# Set Expires Headers
	<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
	Header set Cache-Control "public"
	Header set Expires "Tue, 14 Aug 2020 03:00:00 PST"
	</FilesMatch>
	
	<FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$">
	Header set Last-Modified "Mon, 31 Jan 2011 00:00:00 GMT"
	</FilesMatch>
	# Set the cache-control max-age
	
	# 1 year
	<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
	Header set Cache-Control "max-age=31449600, public"
	</FilesMatch>
	
	# 2 DAYS
	<FilesMatch "\.(xml|js|css)$">
	Header set Cache-Control "max-age=604800, public, must-revalidate"
	</FilesMatch>

	# 4 HOURS
	<FilesMatch "\.(html|htm|txt)$">
	Header set Cache-Control "max-age=14400, must-revalidate"
	</FilesMatch>

3. Включете функцията KeepAlives. Това увеличава скоростта на зареждането в браузера за HTML страници със повече снимки.

Код:
KeepAlive On
KeepAliveTimeout 2

Няколко допълнителни неща. Помолете подръжката на хостинга да ви инсталират PHP акселератора APC или XCashe. Аз лично нямам никой от двата.

Направете няколко теста за Speed Performance с инструментите описани най-горе - надявам се резултата да е положителен!
 
Последно редактирано:
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Тъй като съм абсолютно бос що се касае кодове в хтаксес файла ще питам директно:
1. От къде тръгна и до къде стигна слагайки всичко това? Тоест колко от колко даваше гугъл спийд теста преди корекциите и колко след това?
2. Казваш причината да се заровиш е ЦПУ време - колко беше и до колко успя да го редуцираш?
3. Кода, който прилагаш универсален ли е? (тук очаквам от също разбиращите да се включат) Интересува ме има ли значение дали го прилагам за уордпрес сайт или опънкарт магазин?
Ако всичко това е универсално решение и е донесло добри резултати, то ще е супер тази информация. Все пак един сайт никога не е достатъчно бърз :)
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Напълно ризонни въпроси.
Описаните по-горе подобрения са за сървър Apache - без значение какъв скрипт е инсталиран. В моят случай процесорното време се редуцира с около 35%, но искам да кажа, че то беше просто ненормално високо. Аз описах само три подобрения защото те са актуални за всякакви скриптове. Разбира се, ако се използва wordpress могат да се направят доста допълнителни подобрения в този аспект, като пример има един плъгин за оптимизиране на кеша. Не съм описал всичко, каквото съм направил, защото моят случй се отнася за Magento - един доста тежък и взискателен скрипт. Но скороста преди оптимизирането беше 68 с Google - сега е 90, с YSlow беше 58 - сега е 94.

Надявам се да съм бил полезен.
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Беше. :)
А на тези тестове, визирам гугълският, над колко се счита за добър резултат? Чисто информативно да знам при 83-86 има ли смисъл да гоня още нагоре...
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Може да го докараш до 92-96, максимума е 100. Хубаво е да се навигира в сайт, който бързо зарежда от чисто функционална гледна точка.
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Като допълнение към темата за да не отварям нова, прилагам пакет специално за Magento. Следвайте инструкциите по-доло.

Първо направете следните промени от админ панела:

1. Admin > System > Configuration > Catalog > Frontend

Опцията Use Flat Catalog Category - избери YES
Опцията Use Flat Catalog Product - избери YES
Опцията Allow Dynamic Media URLs in Products and Categories - избери YES

и запазете промените.

2. Изтеглете долните два файла:

a). magento-cleanup - разархивирайте и сложи magento-cleanup.php в рут директорият на сайта. След това го заредете в браузера:

http://www.sitename.com/magento-cleanup.php

б). magento-check - процедирай по същият начин.


3. Изтеглете htaccess файла - разархивирайте и го качете в рут дир-ята.

4. Свалете и инсталирайте Lazy Monkeys - безплатно приложение за бързо зареждане на снимките с ajax - category pages. Инструкции за инсталиране ще намерите във пакета след, като го разархивирате. Вижте демо на приложението.

5. Отворете local.xml - app/etc/local.xml - За всеки случай направете едно копие преди да го промените.

Заменете [file] със [db] във session_save, както е показано по-доло.

<session_save><![CDATA[file]]></session_save>

<session_save><![CDATA[db]]></session_save>

Изчистете кеша във var/cache

Готово - Speedup!

Ако има някакви проблеми, пишете на лични - готов съм да помагам.
 
Последно редактирано:
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Благодаря за полезния туториал. В момента имаме проблем с процесорното време. Един wordpress сайт, с немного посещения, и един инсталиран opencart онлайн магазин, който е в процес на разработка. И тази комбина на моменти натоварва процесора на около 500%. Надявам се да помогне.
 
Последно редактирано:
От: Оптимизирайте Скороста на Сайта си - Speed Performance

За wordpress може да ти помогне ето това от една друга тема тук във форума - аз лично не съм го ползвал:

Не знам как е при Мадженто, но в Уърдпрес успях да спестя много процесорно време, като си кеширах заглавната страница и sidebar-а с един прост скрипт:
http://forum.idg.bg/viewtopic.php?f=8&t=2630&start=0
Чрез него можеш да избереш на колко часа/минути да се обновява съдържанието на страницата или на конкретен кеширан елемент, вместо всеки потребител да генерира наново и наново едно и също нещо. Нямам идея обаче дали е приложимо в конкретния случай!

За wordpress може да пробваш този кеш плъгин - http://wordpress.org/extend/plugins/w3-total-cache/

Що се отнася до opencart разгледай това приложение - платено е 25$, но мисля, че ще даде добри резултати и по специално в редуцирането на процерното време.
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

И тъй като темата ме накара да се поразровя ето нещо за OpenCart, на което се натъкнах днес.
Става дума за smartoptimizer, който е приложен в архива, а според дискусията из форума на опенкарт са излезли няколко идеи. Причината е, че за по-голямата част от потребителите не е дало положителен, а дори отрицателен резултат. Аз ще споделя вариант, който тествах на магазин с малко продукти, никакви промени или екстеншъни слагани с цел по-бързо зареждане.
Това е преди промените:
test_1.jpg

Това е след промените:
test_2.jpg

А в .htaccess Кода е това:
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.

# 2. In your opencart directory rename htaccess.txt to .htaccess.


Options +FollowSymlinks

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>

<FilesMatch ".(js|css)$">
Header append Cache-Control "private"
</FilesMatch>
<FilesMatch "\.(gif|jpe?g|png)$">
Header set Cache-Control "public"
</FilesMatch>

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/plain "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
## EXPIRES CACHING ##

##SmartOptimizer##
<IfModule mod_expires.c>
<FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt|ico)$">
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|ico))$ smartoptimizer/?$1
</IfModule>
</IfModule>
<FilesMatch "\.(gif|jpg|jpeg|png|swf|css|js|html?|xml|txt|ico)$">
FileETag none
</FilesMatch>
##SmartOptimisre##

# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Както казах по-горе - нищо не разбирам от тези неща, но тези корекции виждате какви резултати дадоха при мен. Подозирам, че има още какво да се подобри, но се надявам и други да се включат.

smartoptimizer.zip:

http://dox.bg/files/dw?a=ece383e6d4
 
С включването на mod_deflate в никакъв случай не се намаля процесорното натоварване. Дори напротив - увеличава се! Намалява се единствено трафика между сървъра и клиента.
 
От: Re: Оптимизирайте Скороста на Сайта си - Speed Performance

С включването на mod_deflate в никакъв случай не се намаля процесорното натоварване. Дори напротив - увеличава се! Намалява се единствено трафика между сървъра и клиента.

Това към моят или неговият пост? Или към двата?
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

@lqllqlq - предполагам, че може да направиш още подобрения. Между другото изтегли .htaccess файла от поста ми за Мадженто по-горе и сравни основните неща с твоя.
За opencart разгледай това приложение - платено е 25$, но мисля, че ще даде добри резултати и по специално в редуцирането на процерното време.
 
Последно редактирано:
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Ето едно безплатно решение #casestudy за повишаване на скоростта на Opencart.
Тествал съм го на 7 сайта и работи без отказно.. вдига от 70 на 92%..
Линк към статията
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Ето едно безплатно решение #casestudy за повишаване на скоростта на Opencart.
Тествал съм го на 7 сайта и работи без отказно.. вдига от 70 на 92%..
Линк към статията

НИки, поздрави за статията, решерната е през google + . Добави моля те към материала и информация как да се спре броенето на категориите, подкатегориите и продуктите в тях при всяко презареждане. Това е най-големият проблем на open cart в момента.
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

НИки, поздрави за статията, решерната е през google + . Добави моля те към материала и информация как да се спре броенето на категориите, подкатегориите и продуктите в тях при всяко презареждане. Това е най-големият проблем на open cart в момента.

Това е признание, мерсаж!
Работя и по това, което каза, общо взето съм го правил няколко пъти и директно режа от контролера броячите.. Но ще го тествам и ще направя допълнение или един нов кейс :)

Поздрави,
Еленков
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Поздравления и от мен за добрата статия. Като я видях и веднага ми напомни на статията на Jack Davis, което няма лошо, но ако сте я превели от там би било добре да посочите първоизточника. Относно брояча на категориите, той не спира нито при версията, която сте тествали, нито при по-новите от нея. Единствената разлика е тази, че при тестваната версия все още се използва кеширане на броенето на продукти, което до известна степен замазва положението. За щастие в бъдещата версия 2.0 този проблем е решен или по-скоро почти решен - поне се знае със сигурност, че като се изключи броенето на продукти, наистина няма да се правят никакви допълнителни изчисления и брутално прогресиращи на брой и забавяне заявки към базата с данни. Може да видите как е реализирано в ГитХъб проекта на версията.
 
  • Like
Реакции: CTAH
От: От: Оптимизирайте Скороста на Сайта си - Speed Performance

Поздравления и от мен за добрата статия. Като я видях и веднага ми напомни на статията на Jack Davis, което няма лошо, но ако сте я превели от там би било добре да посочите първоизточника. Относно брояча на категориите, той не спира нито при версията, която сте тествали, нито при по-новите от нея. Единствената разлика е тази, че при тестваната версия все още се използва кеширане на броенето на продукти, което до известна степен замазва положението. За щастие в бъдещата версия 2.0 този проблем е решен или по-скоро почти решен - поне се знае със сигурност, че като се изключи броенето на продукти, наистина няма да се правят никакви допълнителни изчисления и брутално прогресиращи на брой и забавяне заявки към базата с данни. Може да видите как е реализирано в ГитХъб проекта на версията.

Най-от долу на статията е посочен източника още от самото и публикуване : source

Поздрави
 
Последно редактирано от модератор:
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Напълно ризонни въпроси.
Описаните по-горе подобрения са за сървър Apache - без значение какъв скрипт е инсталиран. В моят случай процесорното време се редуцира с около 35%, но искам да кажа, че то беше просто ненормално високо. Аз описах само три подобрения защото те са актуални за всякакви скриптове. Разбира се, ако се използва wordpress могат да се направят доста допълнителни подобрения в този аспект, като пример има един плъгин за оптимизиране на кеша. Не съм описал всичко, каквото съм направил, защото моят случй се отнася за Magento - един доста тежък и взискателен скрипт. Но скороста преди оптимизирането беше 68 с Google - сега е 90, с YSlow беше 58 - сега е 94.

Надявам се да съм бил полезен.
ОМГ това е ненормална работа! А визуално и като юзър експириънс имаше ли чак такава разлика в пърформънса?
 
От: Оптимизирайте Скороста на Сайта си - Speed Performance

Аз ползвах статията на ЕЛЕНКОВ за моя магазин - абсолютно работи супер! Между другото, използвайки тази статия + вградената в системите на повечето хостинг компании кеширащи системи + вграденат система на ОпънКарт за кеширане и не Ви трябва нищо друго за оптимизация.
Не забравяйте да спрете и брояча!

Лично аз опитах и кеширащи модули, но нямаше голяма разлика.... чисто като числа - в Google Page Speed Insight мръдна с 2 единици. :oops:
Има разлика чисто визуално и като юзър експириънс, но не е особено голяма - а от друга страна, въпросните модули, които комбинират Java и CSS - чупят по сериозните и качествени теми!

Мой съвет към всички - не ползвайте такива модули, ако сте си взели сериозна/качествена тема - ще си загубите парите или ще си навредите на магазина!
+ Повечето нови теми имат някакъв вграден кеширащ модул... включително някои български автори имат прекрасни теми! За да не правя реклама и някой да се обиди, ако някой иска ще му изпратя примери на ЛС!
 

Горе