Mājaslapu paātrināšanas tehnikas

Feb 09, 2012
7 minūtes

Strādājot pie Serveriem.LV serveru ātrdarbības uzlabošanas, saskāros ar to, ka klientu mājaslapas var paātrināt krietni vairāk kā es to varu izdarīt no servera puses, izmantojot dažas samērā vienkāršas tehnikas: skriptu/stilu/bilžu konsolidācija un optimizāciju, pāradresāciju samazināšanu, kā arī statiskā satura kešošanu un/vai iznešanu uz x8.lv serveri.

Lapu pāradresācijas

Pirms lapa sāk ielādēties, bieži vien ir redzēts, ka notiek pāradresācija (redirect) no viena domēna uz otru (piemēram, no example.com uz www.example.com vai otrādi). Pirmkārt, es nesaprotu īsti kāpēc tas būtu jādara, jo apmeklētāji visticamāk rakstīs vienkārši jūsu example.com, bez www priekšā… nu vismaz es tā daru… tāpēc man daudz loģiskāk šķiet redirect no www.example.com un example.com. Otrkārt reizēm šīs pāradresācijas ir uztaisītas nevis tur kur tām būtu jābūt - iekš .htaccess faila - bet gan CMS konfigurācijā vai php skriptos, kas nozīmē, ka serverim jāielādē php interpretators, jānolasa skripts un tas jāizpilda tai vietā, lai vienkārši nodot komandu web serverim to izdarīt. Laika ekonomija: vairākas sekundes desmitdaļas lapas ielādes sākumā. Bieži arī notiek pāradresācija domēna ietvaros citā direktorijā (piemēram, no example.com un example.com/web/, kā serveriem.lv lapa pati arī grēko), kas arī izraisa aiztures pirms lapas ielādes sākuma. Vislabāk, ja iespējams, likt saturu tomēr uzreiz domēna sākumdirektorijā.

Lieki CMS moduļi

Vēl viena lieta, par ko cilvēki aizmirst, strādājot ar CMS, ir moduļi. Intuitīvi šķiet, ka jo vairāk moduļi, jo labāk, bet reāli pat izslēgtie moduļi mēdz iespaidot lapas ielādes laiku. Protams, gribās, lai lapa ir pēc iespējas vairāk funkcionāla, bet tad reizēm tā kļūst tik funkcionāla, ka apmeklētāji tajā apmaldās. Tāpēc gan Jūsu apmeklētāju sirdsmiera dēļ, gan lapas ielādes laika mazināšanas dēļ, ir ļoti svarīgi pēc iespējas vairāk atinstalēt mazāk lietotus un nevajadzīgus moduļus CMS sistēmā. Daži moduļi gan varētu būt svarīgi - tie ir kešošanas moduļi, tādi kā WP Super Cache, kas ievērojami paātrina lapu darbību, daļēji vai pat pilnībā pārģenerējot dinamiskās php lapas uz parastiem html failiem, tādējādi minimizējot vajadzību pēc interpretatoru palaišanas pie katra apmeklējuma, kas faktiski parāda vienu un to pašu lapu.

Iekļauto resursu konsolidācija un optimizācija

Trešais ļoti svarīgais moments ir cik citi resursi ir iekļauti lapā. Iekļauto CSS stilu un JavaScript skriptu failu skaitam noteikti nebūtu jāpārsniedz 6, un vispār, atskaitot Google Analytics un jQuery skriptus, nekam vairāk kā vienam stila failam un vienam skriptu failam lapā nebūtu jābūt. Uz katru failu pārlūkprogramma taisa atsevišķu pieprasījumu, kas aizņem laiku gan klientdatorā, gan serverī; turklāt, HTTP un TCP/IP protokolu virstēriņš (overhead), pārsūtot daudz mazu failu, ir procentuāli krietni lielāks (es teiktu, ka failus, mazākus par 1000 baitiem, vēlams nesūtīt pa tīklu individuāli), līdz ar ko faktiski tiek vilkts daudz vairāk datu. Jāņem vērā arī tas, ka pārlūkprogrammas ierobežo maksimālo paralēlo savienojumu skaitu (piemēram, Chrome līdz 6 un Firefox līdz 8 paralēlām konekcijām uz vienu serveri), tā kā dažiem failiem nākas gaidīt līdz tiks ielādēti iepriekšējie.

Diemžēl, mūsdienu CMS sistēmas mēdz piedrazot rezultējošās lapas ar desmitiem dažādu skriptu un stilu, liela daļa no kuriem pat netiek īsti izmantota un faktiski tiek sūtīta pa tukšo… Šo faktu padara vēl skumjātu tas, ka šīs sistēmas mēdz ģenerēt šos stilus un skriptus katru reizi, kad tos pieprasa. No viņu skatpunkta, protams, tas izskatās skaisti, jo nav atsevišķi nekas jāglabā utml… bet kāda jēga katru apmeklējuma reizi lādēt php interpretatoru un likt viņam ģenerēt īsu skriptu, kas nav mainījies mēnešiem ilgi, kad var vienkārši nolikt failu uz diska? Par laimi, populārākās CMS sistēmas tagad sāk to aptvert un ja ne iebūvē šo iespēju, tad vismaz piedāvā pluginu, kas tieši tam ir paredzēts - lai šādus failus ģenerētu tikai tad, kad tie reāli mainās, un saglabāt tos kā atsevišķus failus. Serveriem.LV ir atsevišķais webserveris tieši tādu uz diska esošo failu apstrādei, kas ir optimizēts tieši šiem mērķiem, tā kā lūdzu lietojiet (vairāk par šo te: http://x8.lv/nginx). Viņš arī kompresē visu saturu, lai ieekonomētu apmeklētājiem ielādes laiku.

Ar bildēm situācija ir sarežģītāka, jo nevar īsti apvienot visas bildes vienā. Vai arī var? Lielās bildes, protams, apvienot īsti jēgas nav, bet mazās reizēm var ļoti ērti sakombinēt vienā, izmantojot tā saukto “CSS sprite” tehniku, kad ar CSS palīdzību vienas un tās pašas bildes dažādi reģioni tiek rādīti dažādās lapas vietās. Vairākas vietnes, piemēram spriteme.org, pat ļauj šādas kombinētās bildes noģenerēt kopā ar vajadzīgo CSS stilojumu. Pavisam sīkas bildes pat reizēm var iekļaut pašā HTML vai CSS failā, saites vietā ieliekot Base64 kodētus datus (Data URI Scheme). Šim mērķim arī ir daudz online ģeneratoru. Atceramies: 6-8 paralēlie savienojumi ar vienu serveri… tā kā jācenšās samazināt bilžu skaitu pēc iespējas vairāk. Jāpiezīmē vēl, ka daudzreiz manītas ļoti neoptimālas bildes kā tādas. Bieži vien ar acīm nemanāmu bildes optimizāciju (tieši kompresijas un krāsu paletes variācijām, nevis izšķirtspējas samazināšanu) var panākt izmēra samazināšanu uz 20-30%. Šo darbību arī var veikt online, vai arī ar daudzu dažādu bilžu apstrādes programmu palīdzību.

Statiskā satura paātrināšana

Papildu ieguvumus var baudīt, ja šos, lielākoties nemainīgus, failus novieto pavisam citā domēnā (cookie-free domain), lai, pirmkārt, optimizētu browsera ielādes mehānismu un, otrkārt, izvairītos no cookie sūtīšanu (jo browseris sūta visus saistītos cookie neskatoties uz to, vai pieprasītajam failam reāli tos vajag, un pieprasījums pēc faila faktiski izaug vairākas reizes). Šādi strādā visi lielākie web servisi, tādi kā youtube (domēns ytimg.com), paypal (domēns paypalobjects.com), amazon (domēns image-amazon.com), yahoo (domēns yimg.com), tvnet.lv (domēns itvnet.lv) un citi, lai uzlabotu weblapas ielādes ātrumu. Serveriem.LV saviem klientiem piedāvā Latvijai unikālu pakalpojumu: šādu pašu atsevišķu domēnu - x8.lv. Vairāk par šo lasiet te: http://x8.lv/cookie-free. Ja, sekojot tām instrukcijām, Jūs pārkopēsit statiskos failus speciālajā mapītē, tad x8.lv domēnu var arī norādīt dažādos CDN pluginos (kā, piemēram, jau nosauktajā WP Super Cache, CDN sadaļā). Nākotnē x8.lv tiks uzlabots, vienkāršojot šo procedūru.

Vēl viens mazs ieteikums, kas visvairāk ietekmēs tieši vietējos apmeklētājus, ir optimizēt Google Analytics (ja tas, protams, tiek izmantots) skriptu, pārliekot ga.js skriptu uz savu serveri (vai, piemēram, izmantojot šo linku: 1.x8.lv/x/serveri/ga.js, kas atjaunojas reizi dienā), jo ne visiem apmeklētājiem ir labs savienojums uz Google serveriem, kā arī pati Google neļauj šo failu kešot (attiecīgi, lai gan viņš netiek bieži mainīts, viņš tiek bezjēdzīgi lādēts katru reizi). Izsaukšanas skripta optimizācijas var atrast, meklējot, piemēram, “self-hosted ga.js” (vai arī nošpikot no serveriem.lv lapas koda). Pēc manas pieredzes, tas ļauj lapai vēl drusku ātrāk ielādēties. It īpaši, ja novieto šo ga.js izsaukšanas kodu pašās lapas beigās, bet tam var būt arī negatīvas sekas: ja apmeklētājs aizies prom nu Jūsu lapas pirms tā paspēs pilnībā ielādēties, Google Analytics nespēs šo apmeklējumu uzskaitīt.

Noslēguma vietā

Pēdējais, bet ne mazāks svarīgais, ko gribētos pateikt ir: izmantojiet GTmetrix vietni, lai izanalizētu savu lapu un uzzinātu, kā vēl to varētu optimizēt. Šī vietne izmanto vairākas dažādas tehnikas un piedāvā reālus ieteikumus kā uzlabot, nevis tikai sūdzās. Ja izmantojat Chrome pārlūku, tad tur ir arī iebūvētais lapu analizators (Developer Tools -> Audits), kas var dot papildu materiālu pārdomām.

Lai labi optimizējas!

P.S. Nedz šī, nedz Serveriem.LV lapa nav labas optimizācijas piemērs. Serveriem.LV lapā ir izmantoti daži triki, bet tur ir tālu līdz pilnībai… lastguru.lv lapa gan ir gandrīz neoptimizēta, bet ar laiku droši vien nāksies to izdarīt.