Web lapas ātrdarbības optimizācija

  • 03.05.2012
  • Autors: Efumo

 

Tīmekļa lapas ātrdarbības optimizācija. Kāpēc tas ir svarīgi un kā to izdarīt?

Informācijas pārpilnības laikmetā, kad laikam ir vērtība, ir svarīgi netērēt citu laiku. Un tāds ir viens no lapas ātrdarbības uzdevumiem. Ir svarīgi optimizēt lapas ātrdarbību, jo tas būtiski ietekmē arī mājaslapas parādīšanos meklētāju servisu indeksā. Tātad tas ir būtiski arī SEO (Search Engine Optimization).

efumo-web-optimizacija
Ir ļoti daudz dažādu kritēriju, kas tiek ņemti vērā lapas ātrdarbības noteikšanā, un ir daudz un dažādi rīki, lai šo novērtējumu veiktu bez maksas. Taču ko iesākt ar iegūto informāciju? Visprātīgākais ir to nosūtīt savas mājaslapas uzturētājam un izstrādātājam.

Kā pārbaudīt savas tīmekļa lapas ielādes ātrumu?
Šajās tīmekļa vietnēs iespējams saņemt ātru lapas ielādes izvērtējumu:
http://tools.pingdom.com/fpt/
http://gtmetrix.com/
Tā kā tīmekļa lapu apmeklētāji lieto vairāk nekā vienu interneta pārlūkprogrammu un katram no viņiem ir pieejami arī vairāki interneta pakalpojumu sniedzēji, lapas ātrdarbība ir atkarīga gan no izmantotās pārlūkprogrammas, jo atšķiras koda apstrādes mehānismi, gan pieejamā interneta ātruma. Tikpat būtiska ir servera optimizācija, uz kura atrodas mājaslapa.

Servera puses optimizācija
Katrai tīmekļa lapai ir specifiskas prasības pret servera konfigurāciju, kuru ietvaros arī tiek veikta optimizācija. Tā ir tīmekļa servera datubāzes programmatūras optimizācija attiecībā pret tīmekļa lapu, taču citreiz nepieciešams veikt tīmekļa lapas arhitektūras pārplānošanu un koda optimizēšanu, jo projektā ir parādījušās jaunas prasības.

Koda un datubāzes vaicājumu optimizācija
Vēl viens būtisks optimizācijas posms ir izveidot optimālu, biznesa prasībām atbilstošu kodu. Lielākajā daļā lapu ir klienta veidots saturs, bet bieži vien saturu ievada vienu reizi, kad atrādāmo lapas saturu var uzģenerēt jau kā gatavu statisko saturu, kas pieprasījuma gadījumā tiek parādīts lietotājam ātrāk nekā tad, ja tas būtu jāģenerē katru reizi.
Un viens no būtiskākajiem dinamiskas mājaslapas optimizācijas pasākumiem ir datubāzes vaicājumu optimizēšana, kas sākas ar pareizo indeksu salikšanu datubāzes tabulu laukiem, kā arī biežāk izpildīto vaicājumu glabāšanu kešatmiņā. Iegūto rezultātu var glabāt arī MemCache, un nākamreiz, kad programma gribēs vērsties pie datubāzes servera, vaicājuma rezultāts tiks parādīts no MemCache. Būtiski ir arī veikt datubāzes lēno vaicājumu žurnāla analīzi un nepieciešamības gadījumā pārdomāt datubāzes datu glabāšanas arhitektūru, pārrakstot lēnos vaicājumus.

„Nulles izmēra” kļūdu žurnāls
Jebkurš serviss, piemēram, Apache vai MySQL, datus glabā uz diska. Notiek nepārtraukti datu rakstīšanas un lasīšanas procesi. Katrai lietotnes darbībai ir jānodrošina pēc iespējas mazāks gan rakstīšanas, gan lasīšanas pieprasījumu skaits. Viena no šādām rakstīšanas iespēju samazināšanas metodēm ir servisu kļūdu žurnāla „nulles izmērs”. Ja nebūs kļūdu, kas ir jāieraksta žurnālā, nebūs arī nepieciešamības veikt pieprasījumu datnes rakstīšanai. Tādējādi tiek noņemta papildu slodze no resursiem, ja, izstrādājot lietotni, savlaicīgi ielūkosieties kļūdu žurnālā un novērsīsiet tur atrodamās kļūdas.

Slodzes sadalīšana
Ļoti bieži internetveikali, palielinot pārdošanas apjomus, saskaras ar situāciju, kad mitināšanas uzņēmuma piedāvātais pamatrisinājums vairs nespēj nodrošināt kvalitatīvu pieprasījumu apstrādi un jāsāk domāt par vairāku serveru arhitektūras izveidi, kā arī par slodzes dalīšanu. Viens no pirmajiem soļiem ir tīmekļa un datubāzes servera nodalīšana, šos servisus nošķirot uz diviem atsevišķiem serveriem. Nākamais pasākums ir slodzes dalīšanas servera uzstādīšana, kas ienākošos pieprasījumus pēc nejaušības principa novirza uz vienu vai otru lietotnes serveri. Šāds risinājums ļauj jebkurā brīdī pieslēgt papildu lietotņu serverus, ja nepieciešamība pēc servera resursiem pieaug.

Servera kešošana
Vairumā gadījumu lietotājam piedāvātais saturs ir dinamisks, un tāpēc noteikti ir jāizmanto kāds kešošanas mehānisms. Ja strādā ar PHP, tad viens no šādiem mehānismiem, kas papildus nodrošina līdz pat 25% jaunu pieprasījumu apstrādi, nepalielinot servera resursus, ir APC (Alternative PHP Cache).

Pārlūkprogrammas kešošanas izmantošana
Gandrīz visas pārlūkprogrammas nodrošina ielādētā satura kešošanu, tādējādi, veicot atkārtotu lapas saites izsaukumu, kas jau vienreiz ir pieprasīta, pieejamo saturu var ielādēt no pārlūkprogrammas keša, to neielādējot no servera. Tāpēc ir būtiski pārliecināties, ka statiskais saturs tiek kešots pārlūkprogrammā.

Piemērs:
<IfModule mod_headers.c>
<FilesMatch “.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$”>
ExpiresActive On
ExpiresDefault “access plus 1 year”
</FilesMatch>
Header unset ETag
FileETag None
<FilesMatch “.(ico|pdf|flv|jpg|jpeg|png|gif|js|css)$”>
Header unset Last-Modified
</FilesMatch>
</IfModule>

Gzip saspiešanas izmantošana
Tā ir papildu slodze servera pusē, taču pa tīklu nogādājamais satura apjoms ir daudz mazāks, un jaunās pārlūkprogrammas prot veikt atbilstošu satura apstrādi. No servera ir tikai jāpasaka, kuras datnes ir jāsaspiež un kuras ne.

Piemērs:
<IfModule mod_deflate.c>
# html, xml, css, and js:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
# jpg, png, gif, gz, pdf:
<FilesMatch “.(jpg|png|gif|gz|pdf)$”>
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

Samaziniet satura apjomu
Tas nenozīmē īsākus jaunumu rakstus un vienu preci produktu lapā. Ir jāsamazina uz pārlūkprogrammu nosūtāmo datu apjoms. HTML, CSS, JS datņu minificēšana ir satura samazināšanas metodes. Komentāri kodā, atstarpes un tabi – tie ir būtiski koda lasāmībai, bet nepavisam nav nepieciešami pārlūkprogrammai. Tie ir lieki dati. Veicot koda minificēšanu, ir iespējams būtiski samazināt klienta pārlūkprogrammai nosūtāmo datu apjomu.

Pieprasījumu skaits un CSS sprite
Iedomāsimies ļoti vienkāršu situāciju. Interneta veikala preču lapa. Tajā ir divas Javascript datnes. Tiek izmantotas trīs CSS datnes un attēlotas 24 preces, turklāt katrai no tām ir pieejams attēls. Pirmo reizi pieprasot šādu lapu, klienta pārlūkprogrammai ir jāielādē HTML saturs un vēl 29 elementi. CSS, visticamāk, papildus pieprasīs citas bilžu ielādes, piemēram, sociālo tīklu ikonas un dizaina elementus, kas arī ir atsevišķas satura vienības. Tā kā pārlūkprogramma nevar ielādēt visu saturu uzreiz, tā saturu ielādē secīgi, līdz ar to viss saturs netiek ielādēts vienlaikus. Lai samazinātu pieprasījumu skaitu, tiek lietota attēlu apvienošana, kad dizainu veidojošie elementi tiek apvienoti vienā bildē un, izmantojot CSS, parādīti attiecīgajā lapas vietā. Šādi pieprasījumu skaits tiek samazināts un lapa lietotājam parādās ātrāk. Ļoti būtiski ir tas, ka pārlūkprogrammai ir jāveic arī NS uzmeklēšanas operācija, lai noskaidrotu, kur atrodas pieprasāmais resurss, tāpēc tiek patērēts papildu laiks. Lai gan pēc tam, kad pārlūkprogramma ir nokešojusi kešojamos satura elementus, tad, pirmoreiz atverot lapu, lietotājam ir būtiski nodrošināt ātru lapas ielādi. Pirmais iespaids vienmēr ir svarīgs.

CDN (Content Delivery Network)
Aptuveni 80% patērētā laika tiek izmantots bilžu, skriptu, stilu un flašdatņu ielādei. Kāpēc gan šo saturu un tā piegādi neuzticēt atsevišķam serverim, kura vienīgais uzdevums būs ienākošo satura pieprasījumu apstrāde? Lietotņu serveris šajā gadījumā var nodarboties ar būtiskiem uzdevumiem, piemēram, veikt aprēķinus, tā vietā, lai vēl nodrošinātu statiska satura padošanu klienta pārlūkprogrammai.

Attēlu izmēru samazināšana
Aizvien vēl ir atrodamas lapas, kuru saturā ir liela izmēra attēli, kas ir „smagi”, un to piegāde no servera līdz lietotāja pārlūkprogrammai prasa laiku, tādējādi klients redz, kā attēls pa daļām tiek ielādēts. Attēla patiesie izmēri ir lielāki, nekā tas ir iestatīts lapas kodā. Populārākās satura vadības sistēmas piedāvā attēlu uzreiz samazināt atbilstošajā izmērā, attēlu augšupielādējot, tādējādi lietotājam vienmēr tiks piegādāts tāda izmēra attēls, kādu satura veidotājs ir vēlējies parādīt.

Ko dod šādi optimizācijas darbi?
Tie ļauj ietaupīt servera, tīkla joslas un pārsūtīto datu resursus un, pats galvenais, lietotāja laiku, kas sniedz pozitīvu pieredzi ikvienam Jūsu lapas lietotājam.

Komentāri (0)