Ieškoti

Kešavimas: pirmas žingsnis svetainės spartinimui

0 komentarų
Paskelbta: 2020-07-14 | Atnaujinta: 2021-12-16 | Parašė: Ieva | Užtruksite: 11 min.
kešavimas

Kuriant naują interneto svetainę svarbu pasirūpinti ne tik jos veikimo funkcijomis, informacijos pateikimu, bet ir jos užsikrovimo greičiu lankytojų kompiuteriuose. Tipinis lankytojas nelauks, kol jam ne itin būtina interneto svetainė bus atverta, ir patrauks norimos prekės ar informacijos ieškoti konkurento puslapyje. Taigi, kešavimas gali tapti pirmu ir labai svarbiu žingsniu spartinant svetainės veikimą.

Pastebėjus, kad svetainės veikimo greitis netenkina, pirmiausia reikia išsiaiškinti to priežastį ir lėto veikimo aplinkybes – galbūt lėtai veikia ne bendrai visa svetainė, o tik tam tikras puslapis ar funkcija (pavyzdžiui, prekių filtras). Pasitaiko, jog įvairiais klausimais, tuo pačiu ir bandant paspartinti svetainę, kreipiamės į paieškos sistemų gigantą „Google“ ir tikimės rasti teisingą atsakymą. Tačiau toks sprendimas ne visada yra teisingas, ypač sprendžiant interneto svetainės greitaveikos klausimą. Interneto svetainės yra unikalios, jų programinis kodas, informacija ir lankytojų įpročiai yra skirtingi, tad net ir labai įtikinamai atrodančiame straipsnyje pateiktos rekomendacijos konkrečiai svetainei gali būti netinkamos.

Spartinant svetainę, reikia nustatyti jos lėto veikimo priežastį ir atitinkamai pritaikyti sprendimą. Neretai internete rastais įvairiais įrankiais atlikus svetainės greitaveikos testą gaunamas rezultatas, kad ilgiausiai trunka pirmoji užklausa (angl. Time To First Byte) arba kitaip – ilgas serverio atsako laikas (angl. Server Response Time). Natūraliai kyla mintis, kad svetainė lėtai veikia dėl per mažų serverio pajėgumų ar taikomų limitų, tačiau tai iš tiesų reiškia, kad serveris ilgai užtruko vykdydamas svetainės programinį kodą. Kuo programinis kodas sudėtingesnis, tuo pirmoji užklausa į serverį (kodo vykdymas) užtrunka ilgiau. Vadinasi, jeigu sudėtingas kodas vykdomas ilgiau, reikia jį supaprastinti, o paprasčiausias būdas tai atlikti yra naudoti įvairius kešavimo sprendimus.

Kas yra kešavimas

Populiariose interneto svetainėse tuos pačius puslapius lankytojai atveria šimtus ar net tūkstančius kartų. Kaskart į jų kompiuterius yra atsiunčiamas vis tas pats turinys. Be tinkamo interneto svetainės kešavimo, kiekvieną kartą lankytojui įvykdžius užklausą (pavyzdžiui, paspaudus kategorijos pavadinimą prekių sąraše) yra vykdomas programinis kodas, kuris kreipiasi į serverį, paima informaciją iš duomenų bazės, atlieka įvairius skaičiavimus ir galiausiai rezultatą grąžina lankytojo naršyklei. Jeigu tuo pat metu didelis kiekis lankytojų naršo svetainėje, kuri kreipiasi į serverį tam, kad pateiktų lankytojo pageidautą informaciją, gali smarkiai išaugti serverio apkrovimas, o tuo pačiu ir puslapio užkrovimo laikas. Tačiau jeigu svetainė naudoja kešavimą, pirmojo apsilankymo naujame puslapyje metu kešavimo taisyklėse nurodytam laikui yra išsaugoma jo statinė kopija arba skaičiavimų rezultatai, kad kitiems lankytojams pateikus tą pačią užklausą nebereikėtų pakartotinai vykdyti to paties programinio kodo.

Kaip veikia kešavimas

Siekiant paspartinti svetainę, kurios atvaizdavimui vykdomi sudėtingi skaičiavimai ar kitoks programinis kodas, į laikinąją atmintį išsaugoma statinė puslapio versija. Svetainės lankytojui atvėrus puslapį, jis atvaizduojamas iš laikinosios saugyklos.

Tipinis kešavimo veikimas atrodo taip:

  1. Lankytojas ateina į svetainę;
  2. Naršyklė išsiunčia užklausą į web cache saugyklą;
  3. Jeigu saugykloje jau yra pageidautas turinys, jis atvaizduojamas lankytojo naršyklėje. Jeigu jo nėra, tuomet įvykdomas programinis kodas, o jo atsakymas išsiunčiamas į naršyklę;
  4. Jeigu lankytojo pageidautą turinį ar puslapį galima užkešuoti, jis išsaugomas, o pakartotinai įvykdžius tą pačią užklausą, rezultatas jau atiduodamas iš cache saugyklos.

Kešavimas ir jo būdai

Paprastai programuotojas, kurdamas svetainę, iškart panaudoja specialias funkcijas, kurios leidžia nurodytam laikui puslapį ar jo dalis išsaugoti lankytojo naršyklėje. Šitaip puslapio atvėrimo laikas sutrumpėja, kadangi dalis turinio (pavyzdžiui, paveikslėliai) jau yra išsaugoti lokaliai kompiuteryje ir nebereikia kreiptis į serverį tam, kad tas turinys būtų iš naujo atsiųstas. Tačiau kuo svetainėje daugiau įvairių funkcijų ir galimybių lankytojams, tuo daugiau svetainės turinio reikia užkešuoti. Neretai vien paveikslėlių ar statinių failų lankytojo naršyklėje užkešuoti nepakanka, reikia papildomai išsaugoti ir įvairius skaičiavimų rezultatus ar net visus puslapius. Tokias galimybes turi įvairios turinio valdymo sistemos, o kaip ir ką jos saugo, priklauso nuo jų galimybių ir norimo užkešuoti turinio. Pavyzdžiui, „WordPress“ sistemos įskiepis W3 Total Cache leidžia pasirinkti vieną iš kelių kešavimo metodų, tačiau yra tokių sistemų (tarkime, „Joomla“), kurios naudoja specifines kešavimo taisykles ir pasirinkimo galimybės nesuteikia.

Kešavimo metodas turėtų būti pasirenkamas atsižvelgiant į tai, kas sukelia lėtą svetainės veikimą. Pavyzdžiui, jeigu daugiausiai laiko sugaištama vykdant programinį kodą, svetainę galima paspartinti naudojant „OPcache“. Tuo tarpu jeigu ilgai laukiama, kol bus apdoroti duomenys, galima naudoti vieną iš objektinio kešavimo metodų – „Memcache“ arba „Redis“.

Sertifikuotas duomenų centras

Failų sistema

Dažniausiai naudojamas būdas užkešuoti svetainę – jos puslapius išsaugoti failų sistemoje, t.y. specialiame kataloge šalia kitų svetainės veikimui reikalingų failų. Įprastai šis katalogas vadinamas tiesiog cache. Šiame kataloge sukuriamas statinis puslapis HTML formatu, tad lankytojui atvėrus puslapį, jam atiduodamas statinis to puslapio atvaizdas iš cache katalogo ir nereikia kreiptis į duomenų bazę, atlikti skaičiavimų ir šitaip sugaišti laiko. Paprastai toks kešavimo būdas yra tinkamas nedidelėms svetainėms. Tačiau jei svetainė sulaukia didelio kiekio lankytojų arba turi daug prekių, kešavimas failų sistemoje gali netgi pakenkti.

Sukaupus didelį kiekį cache failų ir išaugus cache katalogo dydžiui, galima susidurti su keliomis problemomis. Pirma – išauga bendras serveryje talpinamų failų kiekis, kas neretai gali būti susiję ir su padidėjusio talpinimo plano kaina. Antra – kuo daugiau failų kataloge, tuo serveriui reikia pereiti per daugiau failų, kol bus surastas ir nuskaitytas reikalingas cache failas. Duomenų kešavimo failų sistemoje privalumas tas, kad šitokį būdą galima rinktis bet kuriame serveryje talpinamų svetainių kešavimui, kadangi tam nėra reikalinga speciali programinė įranga serveryje.

Memcache

„Memcache“ yra kešavimo sistema, duomenis sauganti serverio atmintyje (RAM). Ji naudojama norint paspartinti dinamines internetines svetaines ir aplikacijas sumažinant duomenų bazės apkrovimą. Įprastai, kai kreipiamasi į duomenų bazę, serverio apkrovimas padidėja, o „Memcache“ leidžia šį papildomą apkrovimą sumažinti išsaugojant duomenų objektus (pavyzdžiui, MySQL užklausos rezultatus) į dinaminę atmintį. Vienas iš „Memcache“ privalumų yra tas, kad kešavimui galima panaudoti kelis atskirus serverius. Aplikacijos serveris kreipiasi į vieną iš kelių kešavimo serverių, todėl, esant dideliam svetainės lankomumui, sumažinamas serverių apkrovimas.

Šį kešavimo metodą pravartu naudoti tuomet, kai reikia užkešuoti nedidelius ir nekintančius duomenis, pavyzdžiui HTML kodo fragmentus. „Memcache“ vidinės atminties valdymas yra efektyvesnis išsaugant nesudėtingus duomenis, kadangi taip sunaudojama mažiau atminties meta duomenims apdoroti. „Memcache“ palaiko tik tekstinio tipo duomenis, todėl ši sistema puikiai tinka saugoti tik skaitymui skirtus duomenis, nes jų nereikia papildomai apdoroti ar atlikti su jais veiksmų.

„Memcache“ sistema yra įdiegta ir paruošta naudojimui visuose mūsų profesionalaus hostingo serveriuose. Todėl jeigu serveryje talpinama aplikacija palaiko „Memcache“ kešavimo metodą, jį galima pasirinkti ir naudoti. Svarbu žinoti, kad Memcache serveris yra pasiekiamas iš to paties serverio adresu localhost ir prievadu 11211.

Redis

„Redis“ yra dar viena sistema, skirta duomenims saugoti į serverio atmintį ir juos apdoroti. Jos panaudojimas ganėtinai platus ir neapsiriboja vien tik kešavimu. Ji gali pakeisti įprastą MySQL duomenų bazę ir saugoti dažnai besikeičiančius duomenis – pokalbių sistemas, įvairias turnyrines lenteles, sesijų duomenis ir panašiai. Šios sistemos veikimas panašus į „Memcache“ ir, kadangi jai nereikia nuskaityti disko norint panaudoti išsaugotą informaciją, sutrumpėja laikas, per kurį paimami duomenys, iki milisekundžių.

Skirtingai nei „Memcache“, „Redis“ leidžia saugoti platų spektrą duomenų – nuo tekstinio tipo iki įvairių sąrašų ir sudėtingų duomenų rinkinių. Ši sistema suteikia daug didesnį lankstumą kalbant apie galimus kešuoti objektus. Jeigu „Memcache“ apriboja įrašų pavadinimų ilgį iki 250 baitų ir veikia tik su paprastais tekstiniais įrašais, tai „Redis“ leidžia naudoti iki 512 MB dydžio įrašų pavadinimus ir reikšmes, kurie gali būti kitokio tipo, ne tik standartinio teksto.

„Redis“ tarnyba taip pat yra įtraukta į mūsų profesionalaus hostingo platformą, tačiau pagal nutylėjimą serveriuose nepaleista. Ją pagal poreikį galime paleisti ir kliento nurodytam naudotojui įjungti PHP plėtinį tam, kad PHP programavimo kalba paremtas internetinis puslapis galėtų sąveikauti su „Redis“ tarnyba ir ją naudoti kešavimui.

WordPress įskiepiai

Skirtingai nei kitose svetainės turinio valdymo sistemose, kešavimo galimybių pagal nutylėjimą „WordPress“ branduolyje nėra. Todėl norint užkešuoti svetainės turinį, reikia įdiegti papildomą įskiepį. Kešavimo įskiepių „WordPress“ sistemoje yra ne vienas ir jie skiriasi savo galimybėmis. Vieni jų leidžia vos kelių mygtukų paspaudimu įgalinti svetainės kešavimą su įskiepio kūrėjo parinktais nustatymais, o kiti suteikia galimybę svetainės kūrėjui pačiam parinkti tai konkrečiai svetainei tinkamiausius kešavimo nustatymus. Apžvelgiame kelis populiarius „WordPress“ sistemos įskiepius, skirtus kešavimui.

W3 Total Cache

Vienas populiariausių ir dažnai svetainėse naudojamas įskiepis W3 Total Cache pasižymi itin plačiu nustatymų pasirinkimu. Svetainės kūrėjas gali parinkti, kokias svetainės dalis kešuoti, kur saugoti užkešuotą informaciją – failų sistemoje ar laikinojoje RAM atmintyje, nustatyti skirtingus būdus statinio turinio (JavaScript ir CSS) optimizavimui. Pavyzdžiui, norint sumažinti pirmos užklausos atsako laiką, puslapio informaciją galima saugoti failų sistemoje, o siekiant paspartinti įrašo ar puslapio sukūrimo trukmę, duomenų bazės cache duomenis galima saugoti RAM atmintyje, naudojant „Redis“ arba „Memcache“. Šis įskiepis gali būti per sudėtingas mažiau techninių žinių turinčiam naudotojui, tačiau jis suteikia labai daug galimybių profesionaliam svetainės kūrėjui.

WP Super Cache

Šis įskiepis taip pat dažnai naudojamas ir mėgstamas svetainių kūrėjų, tačiau turintis daug mažiau nustatymo galimybių nei W3 Total Cache. WP Super Cache įskiepis turi du režimus – paprastą (Easy) ir skirtą pažengusiems naudotojams (Advanced). Paprastas režimas turi tik vieną nustatymą – galimybę įjungti arba išjungti kešavimą. Įjungus jį, pritaikomos standartinės kešavimo taisyklės ir nustatoma, kad puslapiai nebūtų kešuojami prisijungusiems naudotojams – kitu atveju įrašus kuriantys asmenys nematytų savo atliktų pakeitimų. Pažengusiems naudotojams skirtuose nustatymuose yra šiek tiek daugiau pasirinkimo galimybių. Pavyzdžiui, galima nustatyti, ar reikia suspausti turinį, ar išvalyti cache paskelbus naują įrašą, parinkti nekešuojamus puslapio tipus ir panašiai. Tiesa, šis įskiepis cache saugo tik failų sistemoje ir nėra galimybės pasirinkti kešavimo RAM atmintyje.

WP Fastest Cache

Nesudėtingas ir lengvai valdomas įskiepis WP Fastest Cache leidžia svetainę paspartinti vos keliais pelės mygtuko paspaudimais. Kaip ir kiti populiarūs įskiepiai, jis turi galimybę optimizuoti statinį turinį, išvalyti cache po naujo puslapio ar įrašo sukūrimo, nurodyti puslapius, kurių nereikia kešuoti bei išjungti kešavimą prisijungusiems naudotojams. Pasirinkus šį įskiepį, automatiškai pritaikomi įskiepio kūrėjų parinkti nustatymai, o kešavimui naudojama failų sistema.

Įskiepių palyginimas

Norint palyginti straipsnyje apžvelgtų įskiepių galimybes, buvo sukurtas testinis puslapis su milžinišku kiekiu tinklaraščio įrašų. Kiekviename įraše buvo patalpinta bent viena geros kokybės nuotrauka, atvaizduojami keli susiję įrašai su nuotraukomis bei komentarai. Toks testavimui skirtas puslapis užėmė 7.28 MB, kas yra net kelis kartus daugiau, nei rekomenduojamas svetainės dydis. Svetainės atvaizdavimui naršyklėje prireikė 3.76 sekundžių, o pirmos užklausos atsako laikas siekė net 2437 ms.

Įdiegus bet kurį iš išvardintų kešavimo įskiepių, rezultatai akivaizdžiai pagerėjo. Svetainės dydis sumažėjo nedaug, kadangi joje naudojamas didelis kiekis paveikslėlių, tačiau tiek pilnas užkrovimo laikas sumažėjo perpus, tiek pirmos užklausos atsako laikas sutrumpėjo maždaug keturiasdešimčia kartų. Įjungus WP Fastest Cache su pagrindiniais nustatymais, svetainė naršyklėje buvo atvaizduota per 1.18 s, o pirmos užklausos atsako laikas sutrumpėjo iki 55 ms. Įskiepis W3 Total Cache su įvairiais kešavimo metodais (naudojant failų sistemą, „Redis“ arba „Memcache“) svetainę paspartino iki 1.19-1.68s, o pirmos užklausos atsako laiką sutrumpino iki 23-55 ms. Norint išgauti dar geresnius rezultatus, reikėtų eksperimentuoti su įvairiais nustatymais ir parinkti tuos, kurie šiai konkrečiai svetainei tinka labiausiai. Deja, bet šiame teste blogiausius rezultatus parodė WP Super Cache įskiepis – įjungus paprastą režimą, svetainė užsikrovė per 1.66 s, o programinis kodas buvo įvykdytas per 308 ms. Tuo tarpu pažengusiojo naudotojo režimu svetainė buvo atverta per 1.56 s, o pirmos užklausos laikas buvo 58 ms.

Apibendrinimas

Kešavimas yra vienas iš paprasčiausiai įgyvendinamų svetainės spartinimo būdų, ypač kai svetainė sukurta naudojant kurią nors populiarią turinio valdymo sistemą. Tačiau svarbu nepamiršti, kad šis spartinimo būdas išsprendžia tik dalį lėtai veikiančios svetainės problemų ir spartinant svetainę reikia pasirinkti tuos metodus, kurie yra tinkami konkrečioms su svetaine susijusioms problemoms, pavyzdžiui paveikslėlių optimizavimu. Taip pat nereikėtų naudoti daugiau nei vieno kešavimui skirto įskiepio, kad ir kaip atrodytų, jog tai turi padėti. Keli įskiepiai nepagreitins svetainės veikimo, netgi priešingai – jie gali vienas su kitu konfliktuoti ir netgi sulėtinti svetainę.

Grįžti į sąrašą
0 komentarų
    Parašyti komentarą
    Atšaukti atsakymą