... avagy hogyan ne legyen a keresőoptimalizálás a tárhelyed ellensége.
Sziasztok!
Ezt a témát már régóta fontolgatom, hogy megnyissam itt a fórumon, biztos vagyok benne,
hogy lesznek viták és ötletek is, amiből a mindennapi életben sok kellemetlenségtől kímélhetjük
meg magunkat! Mivel nem szeretnék senkit sem untatni a hozzászólásom 3/4-ét az imént töröltem is
Mindenféle alapozás nélkül, aki esetleg nem lenne tisztában vele, fogadjuk el azt a tényt, hogy
egy webszerver számára az az ideális, ha az oldal által élért erőforrások legnagyobb hányada
statikus file és minél kevesebb dinamikus tartalom van rajta. Egy statikus file nagyszámú lekérése
messze nem jelent akkora terhelést, még ha sok adatról is van szó, mint egy-egy dinamikus
tartalom lekérése. Ha a webszervernek például a php interpretert meg kell hívnia, az jóval
költségesebb és gazdaságtalanabb, mint pl. 1000 statikus file kiszolgálása.
Az oldal optimalizálás során tehát a célunk mindig legyen az, hogy a lehetőségek szerint
statikus fileokat használjunk, illetve minél kevesebb dinamikus kérést intézzünk a webszerver
felé. Ha mégis dinamikus tartalmat kell használnunk, akkor azt igyekezzünk egy lekérdezéssel
intézni, hiszen ha már fut az interpreter jóval kevesebb időt vesz az igénybe a művelet ha egyszerre
elintézünk mindent, mintha mindent külön szálon tennénk. Kevesebb memóriára és cpu időre lesz
szükség.
Rémisztő példák egy oldal esetén a mesterségesen kialakított erőforrás zabálókra:
- Valós idejű képátméretezők (nagyobb oldal esetén egy oldal megtekintés akár több száz
php kérést is jelenthet, ez gyakorlatilag olyan, mintha 100x többen látogatnák meg a weblapodat, mint, amit
elbír a szerver. - Különböző látogatottság mérők, akik valamelyik objektumra csücsülnek.
- Kölönböző minify scriptek, amik a javascript és css fileokat kicsinyitgetik le, természetesen valós időben!
- stb.
A fenti lista természetesen nem teljes, de most nem is az a cél, hogy teljes listát írjak ezekről, ezek szimplán
a leggyakoribb erőforrás zabálók.
Szeretnék is kiemelni egyet a fentiek közül, ami nem más, mint a minify scriptek. A mindify script annyit tesz, hogy az
eddig statikus javascript vagy css fileokat lecsupaszítják (kiveszik a fölösleges szóközöket, megjegyzéseket,
entereket), majd valós időben továbbadják a böngésző számára. Az ötlet nem rossz, de a kivitelezés
katasztrófa, mivel a megspórolt hálózati forgalmat most cpu idő felemésztésére használjuk. Még akkor is
rossz a megoldás, ha egyébként a program készít cache fileokat. Egyáltalán nincs arra szükség, hogy
ezeket az egyébként jó, ha havonta egyszer változó fileokat állandóan feldolgozzuk! Miért nem jó az,
ha statikus fileként szolgálja ki a szerver? Persze, tömöríteni kell, ezért a fenti scriptek nagy része
a csupaszítás után képes még arra a szörnyűségre is, hogy gzippel betömöríti a kapott eredményt!
Kérdezem én, mi értelme van lecsupaszítani egy filet, ha utána egy jóval hatékonyabb tömörítéssel
betömörítjük? Ha valaki tudja a választ írja meg, mert akkor nem halok meg hülyén! Szerintem egy
böngésző sem dolgozza fel gyorsabban a css-t vagy js-t enterek nélkül!
Miért nem jó az a megoldás, ha ezeket a fileokat előre betömörítjük és szükség esetén ezt a kész
statikus filet adjuk át a böngészőnek? Valószínűleg megfelelő megoldás ez is. A minify scriptek
a lusta felhasználóknak készültek, nem azoknak, akik optimalizálni szeretnék az oldalt. Az előre
betömörítéshez kell egy kb fél perces munkálkodás, illetve a scriptekkel ellentétben az alább
ecsetelt megoldás nem univerzális, mert többnyire az apache webszerver lehetőségeire épül.
Ez nem jelenti azt, hogy más webszerverre ne lehetne átültetni! Érthető, hogy egy seo
csomagban egyszerűbb webszervertől független megoldást adni, így az átlag ember is
boldogan telepítheti minden tudás nélül.
Minify scriptek helyett tehát a következőt javaslom:
Tömörítsük be a js/css fileokat, majd azoknak a böngészőknek, amik támogatják a tömörítést adjuk
oda a kész gzip fileokat. Feltehetitek itt a kérdést, hogy miért nem a mod_deflate-et használjuk.
A válasz az, hogy használhatjuk, de most igyekszünk minimalizálni az extra terhelést, ez egy VPS
esetén már észrevehető különbség lesz, ha a CPU nem az állandó tömörítéssel van elfoglalva!
Nem húzom az időt, bemásolom ide azt a kódot, amivel igen gyorsan elérhetővé tehetitek
a meglévő statikus fileokat gzip tömörítéssel is, úgy, hogy a cms-ben semmit sem kell
változtatni! Csak annyit kell tennetek, hogy gzippel el kell készítenetek az eredeti fileok tömörített
verzióit is a könyvtárban:
Kód:
.htaccess:
RewriteEngine On
Options -Indexes
<FilesMatch .*\.js$>
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.+) $1.gz
</FilesMatch>
<FilesMatch .*\.js.gz>
ForceType text/javascript
</FilesMatch>
<FilesMatch .*\.css$>
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.+) $1.gz
</FilesMatch>
<FilesMatch .*\.css.gz>
ForceType text/css
</FilesMatch>
A fenti .htaccess filet a css/js könyvtárba kell elhelyezned, ezután,
ha js vagy css végződésű filet szeretne a böngésző elérni, a webszerver
megvizsgálja, hogy létezik-e előre betömörített változata a filenak,
ha a böngésző támogatja a tömörített filet adja vissza eredményül.
Megjegyzem, hogy az apache-nak egyébként van egy MultiViews opciója
is, amivel hasonló eredményeket el lehet érni.
A következő alkalomkor a phpthumb féle scriptek optimalizálásáról fogok
írni pár sort.
Könyvjelzők