Jūsu vietnes kešatmiņas vadības iestatījumu paraugprakse

Jūs, iespējams, pamanījāt, ka dažreiz, piekļūstot vietnei otro reizi, tā neizskatās kā gaidīts, un daži stili ir sadalīti, padarot visu izskatās dīvainu. Parasti šīs problēmas cēlonis ir vāji definētas kešatmiņas kontroles politikas, kas neļauj jums saņemt jaunākās izmaiņas pēc pēdējās izvietošanas. Šajā rakstā es parādīšu pareizos kešatmiņas iestatījumus un paņēmienus, kas palīdzēs jums atjaunināt vietni visiem lietotājiem pēc katras izvietošanas.

Tiem no jums, kuri vienkārši vēlas iegūt labāko praksi un sākt to izmantot, sekojiet saitei šeit līdz raksta beigām.

Kā kešatmiņa darbojas aizkulisēs?

Pēc katra vietnes / resursa pieprasījuma jūsu pārlūkprogramma mēģina ielādēt pēc iespējas mazāk datu, no lokālās atmiņas lasot kešatmiņā saglabātu informāciju. Tas ir iespējams tikai tāpēc, ka mēs pārlūkam sniedzam pietiekami daudz instrukciju, lai izskaidrotu, kādi resursi tai jāuztur un cik ilgi.

Šīs instrukcijas darbojas kā direktīvas; Lai pastāstītu par to pārlūkprogrammai, tie jāpievieno atbildes HTTP galvenes informācijai. Biežākās kešatmiņas procesā iesaistītās direktīvas ir “Kešatmiņas kontrole”, “Derīguma termiņš beidzas”, “Etag” un “Pēdējoreiz modificēts”.

Gandrīz katram tīmekļa serverim pēc noklusējuma ir daži kešatmiņas iestatījumi galvenes atbildēs, taču nav skaidrs, ko mēs iegūstam, ja nav kešatmiņas politikas.

Bez kešatmiņas vadības iestatījumiem pārlūks dodas uz tīmekļa serveri katram resursu pieprasījumam un no tā nolasa informāciju. Tas palielina skartās vietnes ielādes laiku, pievieno papildu slodzi jūsu tīmekļa serverim, pārsūtot informāciju, un palielina zvanu skaitu uz jūsu pamata programmu.

Pieprasījumu plūsma bez kešatmiņas iestatījumiem

Pārlūkprogramma izlemj, kā rīkoties un kā kešatmiņā saglabāt informāciju bez servera norādījumiem. Pašlaik pārlūki Chrome un Safari katru reizi lejupielādē datus no aizmugures programmas bez instrukcijas kešatmiņā. Tomēr tas var mainīties un izraisīt atšķirīgu izturēšanos, it īpaši citās platformās.

Lai skaidri definētu, kas jādara ar noteiktiem failiem, padziļināti jāapgūst kešatmiņas vadības direktīvas, pakāpeniski pievienojot tām atbildes galvenes un uzraugot rezultātu.

Etag (Entity tags)

Etag ir viens no kešatmiņas iestatījumiem. Šīs HTTP galvenes galvenā ideja ir ļaut jūsu pārlūkprogrammai apzināties modifikācijas attiecīgajos resursos, neielādējot pilnus failus. Serveris varētu aprēķināt kaut ko līdzīgu ar katra faila jaukšanas summu un pēc tam nosūtīt šo sajaukšanas summu klientam. Nākamreiz, kad klients mēģina piekļūt šim resursam, tā vietā, lai lejupielādētu failu, pārlūks HTTP galvenē nosūtīs kaut ko līdzīgu: Ja nav / nav sakritības: W / “1d2e7–1648e509289”. Pēc tam serveris pārbaudīs šo sajaukšanas summu pret pašreizējā faila jaukšanas summu un, ja būs atšķirība, piespiedīs klientu lejupielādēt jaunu failu. Pretējā gadījumā klients tiek informēts, ka viņam jāizmanto kešatmiņā saglabātā versija.

Pieprasīta plūsma ar Etag - 1. slodzePieprasīta plūsma ar Etag - 2. slodze

Kad ir ieslēgta Etag kešatmiņas politika, mēs vienmēr ejam uz serveri, lai pārbaudītu faila jaukšanas summu, un tikai pēc tam pārlūks nolems noņemt to no kešatmiņas vai pilnībā ielādēt. Kad resurss nav modificēts, tas prasa tikai 80–100 baitus, lai pārbaudītu neatkarīgi no tā, ko jūs pieprasāt, vai tas ir 10KB vai 10MB fails.

Pēdējoreiz modificēts

Vēl viens kešatmiņas vadības iestatījums ir HTTP galvene “Pēdējā modificētā”. Galvenā ideja ir ļoti līdzīga Etag, taču pārlūka uzvedība ir nedaudz atšķirīga. Serveriem ir katra faila pēdējā modificētā datuma laika zīmogs; pēc pirmās faila ielādes klientam ir iespēja pieprasīt serverim, vai resurss ir modificēts kopš tā brīža, kad klients pēdējoreiz piekļūst failiem. Lai to izdarītu, pārlūks HTTP galvenē nosūta If-Modified-Since: piektdien, 2018. gada 13. jūlijā plkst. 10:49:23 GMT. Ja resurss ir modificēts, pārlūkprogrammai ir jālejupielādē jauns fails, pretējā gadījumā tas izmanto kešatmiņā saglabātu versiju.

Patiesībā pārlūkprogrammām ir iekšējā kešatmiņas politika, un viņi paši var izlemt, vai noņemt resursus no kešatmiņas vai lejupielādēt jaunu kopiju.

Pēdējoreiz modificēts ir vājš kešatmiņas galvene, jo pārlūks izmanto heiristiku, lai noteiktu, vai atnest vienumu no kešatmiņas, un heiristika dažādās pārlūkprogrammās atšķiras.
Google kešatmiņas saglabāšanas paraugprakses ceļvedis
Pieprasījumu plūsma ar pēdējoreiz modificētu - 1. ielādePieprasījumu plūsma ar pēdējoreiz modificētu - 2. ielāde (ideāls scenārijs)Pieprasījumu plūsma ar pēdējoreiz modificētu - 2. ielāde (parasts gadījums)

Tā rezultātā mēs nevaram paļauties tikai uz pēdējoreiz modificētiem, tāpēc es gribētu to pilnībā noņemt no mana servera iestatījumiem, lai samazinātu trafiku, pat ja tas ir tikai daži baiti.

Kešatmiņas kontroles maksimālais vecums

Šī direktīva ļauj mums norādīt pārlūkprogrammai, cik ilgi tai vajadzētu saglabāt failu kešatmiņā kopš pirmās ielādes. Laiks, kurā pārlūkprogrammai vajadzētu saglabāt failu kešatmiņā, ir jānosaka sekundēs, parasti tas tiek parādīts šādi: Cache-Control: max-age = 31536000. Izmantojot šo politiku, pārlūks pilnībā izlaiž pieprasījumu uz jūsu serveri procesu un ļoti ātri atver failus. Bet kā mēs varam būt pārliecināti, ka fails tik ilgi nemainīsies? Mēs to nedaram.

Tātad, lai piespiestu pārlūku lejupielādēt vajadzīgā faila jaunu versiju, mēs izmantojam paņēmienu, ko ievieš daudzi aktīvu veidotāju rīki, piemēram, Webpack vai Gulp. Katrs fails tiks iepriekš apkopots uz servera, un failu nosaukumiem tiek pievienotas hash summas, piemēram, “app-72420c47cc.css”. Pat nelielas faila izmaiņas tiek atspoguļotas hash summā, kas garantē, ka tas tiks atzīts par atšķirīgu. Tātad pēc nākamās izvietošanas jūs iegūsit jaunu faila versiju. Tas var attiekties uz visiem mūsu css, js un attēlu failiem (max-age = 31536000); pēc tam, kad būsim kaut ko mainījuši, pārlūks vienkārši pieprasīs jaunu failu ar jaunu jaucējsummu, kuru pēc tam kešatmiņā.

bez kešatmiņas

Iepriekš minētās tehnikas sarežģītā daļa ir tā, ka jūs nevarat aizmirst par html failiem; ja šo iestatījumu piemērosit arī tiem, jūs nekad nesaņemsit jaunas saites uz css, js vai attēlu failiem, kamēr nepiespiedīsit pārlādēt.

Es iesaku jums html failiem lietot Cache-Control: no cache. Piemērojot "bezkešatmiņas" nenozīmē, ka nav cache vispār, tas vienkārši stāsta pārlūku apstiprinātu resursus uz servera, pirms izmantot to no cache.That s, kāpēc mums ir nepieciešams, lai izmantotu to ar ETAG, lai pārlūkiem sūtīs vienkāršs pieprasījums un ielādējiet papildu 80 baitus, lai pārbaudītu faila stāvokli.

Galīgie iestatījumi

  • Izmantojiet Gulp, Webpack vai līdzīgu, lai pievienotu unikālus hash ciparus css, js un attēlu failiem (piemēram, app-67ce7f3483.css);
  • Js, css un attēlu failiem iestatiet kešatmiņas kontroli: publisks, maksimālais vecums = 31536000, bez Etag, bez pēdējās modifikācijas iestatījumiem.
  • Html failiem izmantojiet Cache-Control: bez kešatmiņas un Etag.

Tātad, kā redzam, pat acīmredzamas un ierastas lietas, piemēram, statisko failu kešatmiņā, var nebūt acīmredzamas, ja mēs ienirsim dziļāk. Labi pētījumi var neļaut jums pieļaut kļūdas un samazināt trafiku jūsu serverī, samazinot vietnes ātruma ielādes laiku.

Pieskarieties pogai , ja šis raksts jums šķita noderīgs!

Vai jums ir kādi jautājumi vai atsauksmes? Pievienojiet caur Pixel Point