Bruke WordPress for utvikling av webapplikasjoner tilgjengelige funksjoner, del 7 caching

Når det gjelder å bygge webapplikasjoner, er en av de viktigste tingene vi må konstatere å være oppmerksom på.

Som de sier, er ytelse en funksjon.

Og uansett om du er designer, utvikler eller bruker, vet du dette intuitivt for å være sant: Når det gjelder applikasjoner, hater vi å vente. Vi blir frustrert når ting ikke fungerer raskt nok, eller vi må vente lenger enn vi tror at vi burde.

For det formål gjør de fleste moderne webutviklingsrammer det mulig å implementere noen form for caching gjennom bruk av visse APIer, og WordPress - selv om en grunnlag er ikke annerledes.

Så når vi fortsetter vår diskusjon om hvorfor WordPress er et levedyktig alternativ for å tjene som grunnlag i webapplikasjonsutvikling, tar vi en titt på APIene som leveres av kjerneprogrammet, hvordan de fungerer, hvordan vi kan utnytte dem til å vår fordel, og hvordan ytelsen kan forbedres enda mer ved hjelp av ekstra caching plugins.


Hvorfor er Caching viktig?

Kort sagt, caching er viktig fordi det tillater oss å lagre data som ofte hentes på et sted i minnet, slik at det raskt kan hentes.

Når du ser på dette i større målestokk, blir dette stadig tydeligere når flere brukere ser på et nettsted. Dermed mener jeg at hvis en enkeltperson - eller et svært lite antall - treffer et nettsted, og siden har sine data lagret i en database, så hver gang en side er lastet, må denne informasjonen hentes fra database, satt inn på siden, og deretter returnert til brukeren.

Hvis et nivå av caching er innstilt, vil det ikke være behov for å ringe til databasen så ofte. I stedet kan informasjonen trekkes fra et område i minnet som resulterer i raskere henting, og dermed raskere sidelastningstider.

Vi kommer inn i de tekniske detaljene av dette litt mer senere i artikkelen.

Hva om plugins?

Hvis du har brukt WordPress i betydelig tid, så er du sannsynligvis kjent med en rekke caching-plugins som er tilgjengelige.

Dette er uten tvil gode løsninger for å øke hastigheten på ditt nettsted og / eller webapplikasjon, men det løfter spørsmålet: Hvis plugins er tilgjengelige for å gjøre dette, hvorfor skal vi bekymre oss om det?

Det er et gyldig spørsmål, for å være sikker, men pluginene kan bare gjøre så mye arbeid på egen hånd.

Utviklere kan strukturere sine applikasjoner på en slik måte at de ikke bare fungerer bra uten cache-mekanismer, men vil også bli sterkt forbedret ved hjelp av caching-plugins.

Dermed mener jeg at disse caching-pluginene ser etter at data lagres på et bestemt sted av temaer og applikasjoner, og hvis vi kan programmatisk gjøre det innenfor rammen av vårt eget arbeid, vil pluginene resultere i enda bedre ytelse.

Når vi ser på APIene som vi har tilgjengelig, vil vi se dette emnet for å se hvordan de forbedrer ytelsen til caching plugins senere i artikkelen.


Transient-API

For å introdusere et første nivå av caching i applikasjonen, må vi dra nytte av WordPress 'Transients API. Merk først at den offisielle definisjonen av en forbigående er "noe som bare eksisterer i kort tid."

Akkurat som definert i Codex:

[Transient API] gir en enkel og standardisert måte å lagre hurtigbufrede data i databasen midlertidig ved å gi den et egendefinert navn og en tidsramme hvoretter den utløper og bli slettet.

Men hva betyr dette nøyaktig? Tross alt lagres dataene fortsatt i databasen, så hvorfor er dette noe bedre enn å holde data lagret i en hvilken som helst annen databasetabell (for eksempel wp_options bord?)?

Når vi går tilbake til diskusjonen om caching og plugins, snakker vi mer om dette i mer detalj.

Innstilling av transienter

Det er faktisk veldig enkelt å angi en forbigående verdi, og det er mye som å lagre data i alternativtabellen.

Spesielt trenger du en nøkkelverdi som unikt identifiserer dataene, og du trenger en verdi som skal knyttes til den aktuelle nøkkelen. Du trenger også en utløpstid (i sekunder) for å holde dataene i tabellen før du forfrisker det.

Så la oss si at vi vil lagre den nåværende brukerens navn som den siste eller siste brukeren som er aktiv på nettstedet. Vi kan gjøre dette ved å dra nytte av wp_get_current_user () funksjon.

Først setter vi verdien slik:

set_transient ('most_recent_user', wp_get_current_user () -> user_login, 12 * HOUR_IN_SECONDS)

Her legg merke til et par ting:

  • Jeg identifiserer den siste brukeren i systemet som den nåværende brukeren som var logget inn, og vi lagrer den i 12 timer.
  • Legg merke til at HOUR_IN_SECONDS konstanter er noe som ble introdusert i WordPress 3.5. En fullstendig liste over konstanter er tilgjengelig her.

Selv om dette er hvordan vi går om innstilling En forbigående, dette regner fortsatt ikke med hvordan vi kan håndtere transienter hvis de ikke eksisterer, eller hvis de allerede eksisterer.

Vi vil dekke det mer litt senere i artikkelen.

Henter transienter

Når det gjelder å hente transienter, er det veldig likt å hente ting som metadata eller alternativer. Dermed mener jeg at vi bare trenger å vite nøkkelen til å hente informasjonen.

Så i tråd med eksemplet ovenfor kan vi hente den siste brukeren av søknaden med følgende samtale:

get_transient ('most_recent_user');

Dette vil åpenbart returnere hvilken type informasjon du lagret, eller hvis forbigående er utløpt, det vil si at over 12 timer har gått, vil funksjonen returnere den boolske verdien av FALSK.

Dette er nøkkelen til å huske spesielt når du prøver å lese cacheværdier, og deretter måtte du hente dem fra en annen datakilde hvis de ikke er tilgjengelige i forbigående butikk.

Vi tar en titt på et komplett eksempel på å gjøre dette før artikkelen slutter.

Slette transienter

Til slutt bør du slette en forbigående enten for å fjerne den helt eller for å fjerne den før den definerte utløpet for å erstatte den med en annen verdi, så vil du bare bruke følgende funksjon:

delete_transient ('most_recent_user');

I tillegg vil denne funksjonen returnere FALSK hvis slettingen av den forbigående verdien ikke lykkes ellers kommer det tilbake FALSK.

Utløpende transienter

Når det gjelder innstillingstider for cacheværdier utløper, finnes det en rekke måter som gjør det lettere å angi verdier i stedet for musikk grunnleggende heltall manipulasjon.

For eksempel, MINUTE_IN_SECONDS er mye lettere å bruke enn 60, spesielt når du multipliserer det med, for eksempel minutter, timer eller dager.

Og fra WordPress 3.5 har flere konstanter blitt lagt til kjerneprogrammet som gjør disse beregningene mye lettere å lese.

nemlig:

  • MINUTE_IN_SECONDS
  • HOUR_IN_SECONDS
  • DAY_IN_SECONDS
  • WEEK_IN_SECONDS
  • YEAR_IN_SECONDS

Mye enklere å bruke, å lese, og å skrive, er det ikke?


Et komplett eksempel på bruk av transienter

På dette punktet synes jeg det er viktig å se på hvordan vi kan gå om å sette opp transienter, begynne med å lagre en verdi i alternativtabellen.

Her er ordren der vi skal gjøre om dette:

  1. Vi lagrer et alternativ i wp_options bord.
  2. Deretter sjekker vi for å se om verdien finnes i hurtigbufferen.
  3. Hvis verdien gjør eksisterer i hurtigbufferen, vil vi slette den Ellers vil vi legge til det.

Så, i andre halvdel av koden, gjør vi følgende:

  1. Vi prøver å hente en verdifunksjonen cachen.
  2. Hvis verdien finnes i hurtigbufferen, kommer vi tilbake til alternativtabellen; Men hvis verdien eksisterer, bruker vi den.

Med det sagt, la oss ta en titt:

 $ brukernavn = wp_get_current_user () -> user_name; add_option ('most_recent_user', $ brukernavn); // Sjekk om verdien finnes i cachen hvis (FALSE! == get_transient ('most_recent_user')) // Hvis det gjør, sletter vi det ... hvis (delete_transient ('most_recent_user')) // ... og lagre den siste brukeren i maksimalt ett minutt set_transient ('most_recent_user', MINUTE_IN_SECONDS);  ellers // Slettingen mislyktes, så logg feilen // Prøv nå å lese verdien fra hurtigbufferen. Hvis (FALSE! == ($ brukernavn = get_transient ('most_recent_user')) // Siden det ikke eksisterer, leser vi det fra alternativets tabell $ brukernavn = get_option ('most_recent_user'); // Og da oppdaterer vi cache set_transient ('most_recent_user', $ brukernavn, MINUTE_IN_SECONDS);

Merk at dette eksemplet ikke er fullført, det kan bli refactored å være litt renere, og koden skal abstraheres til funksjoner som er mer relevante for applikasjonen, men formålet med denne koden er å vise hvordan man skal håndtere betinget logikk, alternativer , og transienter.


Hvordan passer dette med plugins?

Nå, med det hele sagt, kan vi revidere spørsmålet om hvordan bruk av transienter kan forbedre ytelsen i plugins.

Som vi tidligere nevnte:

Når vi ser på APIene som vi har tilgjengelig, vil vi se dette emnet for å se hvordan de forbedrer ytelsen til caching plugins senere i artikkelen.

Med det sagt, caching og WordPress-databasen har å gjøre med plassering av dataene i databasen.

Siden transienter lagres på et annet sted enn resten av dataene, vil plugins, for eksempel et memcached-basert plugin, søke etter data der transienter lagres, og deretter laste dataene inn i minnet fra den plasseringen.

Når dataene blir forespurt, blir det derfor hentet fra minnet. Hvis dataene ikke eksisterer, blir det hentet fra databasen.

På toppen av det, hvis programmeringen er gjort riktig, når data ikke leses fra hurtigbufferen og hentes fra databasen, blir den satt inn i hurtigbufferen, slik at neste gang den hentes, vil den være tilgjengelig i minnet.

Til slutt er det viktig å merke seg om forbigående informasjon at den har en utløpsperiode. Dette betyr at data kun lagres i dette området av databasen i en bestemt tidsperiode.

For det formål må vi ta hensyn til det. Dette betyr at når vi skal hente transienter, må vi sørge for at de eksisterer. Hvis de ikke gjør det, tar vi dem fra hvor de er er plassert, og lagre dem deretter på riktig sted.


Tilpassede spørringer

På dette tidspunktet har vi dekket mye grunnlag av funksjonene som WordPress tilbyr som det gjelder et grunnlag for utvikling av webapplikasjoner.

Men vi har en siste hovedkomponent for å dekke, og det er slik å håndtere tilpassede spørringer.

Jo, det er noen gode APIer som det gjelder å kjøre spørringer designet for WordPress spesifikke formål-lignende WP_Query og WP_User_Query, men vi vil også ta en titt på noen av de innfødte fasilitetene som tillater oss å skrive tilpassede spørringer mot databasen ved hjelp av definerte WordPress-objekter, samt metoder som tillater riktig dataopprensing.

Men vi vil dekke alt dette og mer av det materialet i neste artikkel.