PDA

View Full Version : Неколико техничких предлога


D.i M.e
08.11.2009, 00:54
Већ другу годину заредом, Милош ми је спремио слику за пријаву на лутрију (тј. моју „сирову“ слику је исекао и прилагодио правилима лутрије) па пре свега због тога али и уопштено јер волим да дајем ове техничке савете :), реших да напишем ову поруку са детаљним предлозима за побољшање перформанси форума.

Од прихватања ових предлога, корист ће имати сви корисници, а посебно они са споријом везом ка интернету, а таквих нас је у бившој Југославији нажалост још увек доста, али и Милош, пошто би то требало и да растерети сервер.

Технички неупућене особе немају потребу да читају на даље пошто следе ствари које им ништа не значе.

Сви ови предлози су везани за алатку која покреће овај форум, vBulletin, мада нека подешавања би требало изменити и на другим местима, и све заједно не би требало да одузме више од петнаестак минута времена. Такође све ово се може примети на све vBulletin форуме, или барем на 3.7 грану (мада је и у другим вероватно слично), а уоштено ови савети важе за све веб сајтове (на пример код за .htaccess који служи за компресију би требало да се стави на сваком веб сајту који се налази на Apache серверу; за друге сервере је нешто другачији).

Иако сам у првом тренутку хтео да ове предлоге дам теоријски, тј. да наведем шта би уопштено требало урадити али без додира са самим vBulletin-ом, одлучио сам да ипак инсталирам vBulletin на свом серверу да бих видео како конкретно направити ове измене.

Код себе сам користио издање 3.7.2, пошто је то најближе, кх, кх, легално издање које сам нашао, а верујем да нема неких великих разлика (ако уопште и има разлика које се не тичу неких преправки „испод хаубе“).

Суштина ових предлога је да се смањи величина страница које се испоручују кориснику, смањи величина других текстуалних датотека и смањи оптерећење сервера, пре свега базе података.


Прва ствар се тиче CSS-а. Претпостављам из разлога што се то чува у бази, vBulletin даје одређени CSS код на свакој страници што је изузетно нерационално и непрактично. Разлог је што је једна од одлика CSS-a то што се он може сместити у засебну датотеку која ће бити учитана само ако није снимљена у кешу корисника, што значи да се учитава само приликом првог отварања неке странице и након тога једино ако се избрише из кеша. У садашњој ситуацији се потпуно непотребно учитава на свакој страници и тако изузетно повећава величину странице али и врши додатно оптерећење на базу и сервер.

Решење за овај проблем је већ уграђено у vBulletin. Потребно је да се у подешавањима на vBulletin Options/vBulletin Options па под Setting Group/Style & Language Settings изабере да се CSS снима у засебној датотеци. Пре тога је потребно променити дозволе директоријума clientscript/vbulletin_css да би се тамо могла снимити та датотека. Претпостављам да се у случају прављења измена CSS-а унутар vBulletin-а врши и прављење нове датотеке тако да нема последица у смислу да се не може ажурирати CSS.

(још теорије (http://developer.yahoo.com/performance/rules.html#external))


Друга ствар се тиче јаваскрипта из Јахуове библиотеке Yahoo! User Interface, скраћено YUI. Две датотеке ове библиотеке се учитавају на свакој страници. Подразумевано оне се учитавају са истог сервера на коме се налази и форум.

Међутим, Јаху нуди (http://developer.yahoo.com/yui/articles/hosting/) учитавање тих датотека са својих сервера потпуно бесплатно. Тиме се растерећује сервер јер нема непотребног захтева на серверу, смањује се искоришћени проток а повећава се и брзина учитавања странице због тога што се онда користи још један hostname. Такође, Јахуови сервери су сигурно бржи и распоређени су на више места у САД и свету тако да је и брзина самог учитавања тих датотека сигурно већа.

Нажалост, vBulletin ово не користи најбоље у смислу да на крају URL-а датотека са Јахуових сервера додаје и број издања што онемогућава да се уколико је корисник већ посетио неку страницу која користи те датотеке потпуно избегне учитавање јер су оне већ у кешу (додуше ако је посетио vBulletin форум са истим издањем који ово користи онда би се избегло учитавање, али најбоље би било када не би ово додавао)

Да би се укључило учитавање са Јахуових сервера, потребно је ићи на vBulletin Options/vBulletin Options па под Setting Group/Server Settings and Optimization Options.

(још теорије овде (http://developer.yahoo.com/performance/rules.html#split), овде (http://developer.yahoo.com/performance/rules.html#cookie_free), овде (http://developer.yahoo.com/performance/rules.html#cdn), овде (http://code.google.com/intl/sr/speed/page-speed/docs/rtt.html#ParallelizeDownloads) и овде (http://code.google.com/intl/sr/speed/page-speed/docs/request.html#ServeFromCookielessDomain))

Следећа ствар се тиче смањења, односно компресије текстуалних садржаја. Овде се мисли да се HTML, CSS, Javascript и друге датотеке које имају текстуални садржај смање уз помоћ GZIP-а и тиме драстично повећа брзина учитавања странице. Подразумевано vBulletin већ смањује HTML странице уз помоћ PHP-овог ZLIB-а и то на најслабијем нивоу. Међутим CSS и Javascript који се учитавају са празним кешом се не компресују.

За то постоји следеће решење. Потребно је у датотеци .htaccess која се налази у корену сајта (дакле један ниво изнак директоријума forum) додати следеће три линије (ово у средини је једна линија; ако се копира одавде требало би да без проблема се тако појави):

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml
</IfModule>

Ово ће омогућити компресију свих за форум важних садржаја. Овде је наведен и HTML. Ја препоручујем да се искључи компресија преко PHP-a и да се иде на компресију преко Apache-а као што се иде за CSS и Javascript, јер би то требало да мало смањи оптерећење сервера а и тако би се вршила компресија и ако би био неки садржај ван форума. У vBulletin-у се компресија HTML-а подешава на vBulletin Options/vBulletin Options па под Setting Group/Cookies and HTTP Header Options

(још теорије овде (http://developer.yahoo.com/performance/rules.html#gzip), овде (http://code.google.com/intl/sr/speed/page-speed/docs/payload.html#GzipCompression), овде (http://code.google.com/speed/articles/gzip.html), овде (http://www.websiteoptimization.com/speed/tweak/compress/) и овде (http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/))

Следећа ствар се тиче растерећења базе података па тако и самог сервера приликом упита. Подразумевано, аватари и прилози се снимају у бази података што значи да се приликом скоро сваке отворене стране прави велико оптерећење на базу. Такође се и база умногоме повећава великим бројем садржаја. База не би требало да служи за складиштење оваквог садржаја.

Уместо тога, ове датотеке би требало да се нормално снимају на сервер и за то постоје подешавања у vBulletin-у. За подешавање снимања прилога иде се на Attachments/Attachment Storage Type, а за аватаре на Avatars/User Picture Storage Type. У оба случаја потребно је подесити дозволе одговарајућих директоријума тако да vBulletin може да снима датотеке. Такође је потребно и да се садржаји који се тренутно налазе у бази пребаце на сервер.

Последња ствар неће убрзати учитавање нити растеретити сервер, већ напротив, а ради се о мом личном предлогу ради лакшег коришћења форума. Наиме, подразумевано нерегистровани посетиоци не могу да прегледају прилоге које уз поруке постављају регистровани корисници. Када пробају да га отворе, добијају страницу да се морају регистровати.

По мени ово умањује функционалност форума јер неко можда нема разлог да се региструје а овако је на то приморан. Пошто на овом форуму нема много прилога, неће доћи до неког великог оптерећења сервера нити до додатно потрошеног протока, то ће и овако бити занемарљиво ако се примене ставке изнад наведене.

Приказ прилога нерегистрованим корисницима се може омогућити глобално на цео форум или на појединачне форуме на страници Forums & Moderators/Forum Permissions, притиском на Edit поред Unregistered / Not Logged In.


Ево и нечега до чега сам дошао тестирајући (http://www.websiteoptimization.com/services/analyze/) ове предлоге изнад (додуше без последње две ставке). Потпуно иста почетна страница са подразумеваним вредностима је тешка 119083 бајта, док је са примењеним изменама, укључујући и коришћење компресије преко Apache-а а не PHP-а износила 56963 бајта што значи да је величина странице дупло мања. У то треба урачунати и да су 14654 бајта са Јахуових сервера.


Мислим да сам раније имао још неке предлоге али сада не могу да их се сетим. Када се будем сетио, навешћу их овде. Надам се да ће Милош прихватити ово, а ако не барем да наведе разлоге зашто не, можда ја у нечему грешим.

srdjevic
10.11.2009, 18:35
Pozdrav, D.i.M.e!

Kao prvo, hvala na pomoci, i na krajnje korisnim savetima!

Prodjoh settings tabove jedared dok sam setup-ovao, i od tad... nisam se iskreno bavio optimizacijom, jer je server dovoljno jak da podrzi 'vakav protok/opterecenje... :grin:

Ajmo redom, kratko cu samo (za sada), posto sam malo u guzvi (poceli ljudi da koriste formular za prijavu na Lutriju)... :smrc:

1. CSS - sredio.
2. JS - sredio.
3. da, bio je GZIP ukljucen vec... prebacih ga u htaccess i zbog novog sajta, da ne moram da pisem oba reda koda... :grin:
4. [email protected]: razumem razloge, ali opet mislim da nije toliki problem, bar ne za sada... Zahteva malo vise posla da se postavi/promeni sve, tako da cemo to ostaviti za neki drugi put. :grin:
5. misljenja sam da i treba ljudi da se registruju ako su zainteresovani za Lutriju. :obrva: Ako su samo zainteresovani za attachmente o States (sa foruma lokacije), to ce biti u novoj Lokacije/Drzave sekciji i tako... a bice i posebna download sekcija, van foruma...mada i za nju ce trebati registracija; bar za sada. :grin:

Jos jedared, puno hvala na utrosenom vremenu i korisnim linkovima! :bravo: