WordPressissä tapahtuu jatkuvasti asioita, joita käyttäjä ei näe. Sivut latautuvat, skriptit suorittavat tehtäviään, ja taustalla pyörii pieniä mekanismeja, jotka pitävät järjestelmän hengissä. Yksi näistä hiljaisista työmyyristä on Heartbeat API.
Nimi kuulostaa dramaattiselta, ja jollain tavalla se onkin osuva. Heartbeat API on kirjaimellisesti WordPressin syke. Se on järjestelmä, joka lähettää säännöllisiä signaaleja selaimen ja palvelimen välillä.
Ei näyttävä. Ei glamouria. Mutta ratkaisevan tärkeä.
Mikä Heartbeat API oikeastaan on?
Heartbeat API on JavaScript-pohjainen mekanismi, joka lähettää AJAX-pyyntöjä palvelimelle säännöllisin väliajoin. Ajatus on yksinkertainen:
Selain sanoo: “Hei palvelin, olen edelleen täällä.”
Palvelin vastaa: “Hyvä. Tässä hieman dataa takaisin.”
Tämä tapahtuu yleensä 15–60 sekunnin välein riippuen kontekstista.
Heartbeat ei ole virhe, ei bugi eikä mystinen kuormituspiikki. Se on design-valinta.
Miksi WordPress tarvitsee “sykettä”?
Moderni web ei ole enää staattinen dokumenttikokoelma. Se on jatkuvaa vuorovaikutusta.
WordPress käyttää Heartbeat APIa muun muassa:
-
autosave-toimintoihin
-
editorin lukituksiin
-
sessionhallintaan
-
ilmoituksiin
-
reaaliaikaiseen synkronointiin
Ilman Heartbeat APIa monet tutut toiminnot lakkaisivat olemasta “reaaliaikaisia”.
Autosave – näkymätön henkivakuutus
Kun kirjoitat artikkelia ja selain kaatuu, autosave pelastaa päivän. Heartbeat API:
-
lähettää luonnoksen palvelimelle
-
tekee tämän automaattisesti
-
estää työn katoamisen
Autosave ei ole vain mukavuus. Se on katastrofienhallintaa.
Editorin lukitus: kuka muokkaa mitä?
WordPressin editorissa näkyvä ilmoitus:
“Tätä artikkelia muokkaa toinen käyttäjä”
on Heartbeat API:n ansiota.
Heartbeat:
-
tarkistaa, kuka on aktiivinen
-
päivittää lukitustiedot
-
estää päällekkäiset muokkaukset
Ilman tätä syntyisi klassinen yhteistyöhelvetti:
“Kuka tallensi päälle?”
Reaaliaikaisuus ilman WebSocketteja
Heartbeat API on tavallaan WordPressin “kevyt reaaliaikaisuus”.
Se ei ole jatkuva avoin yhteys kuten WebSocket, vaan:
-
jaksottainen kommunikaatio
-
riittävän nopea UX:n kannalta
-
huomattavasti yksinkertaisempi infrastruktuuriltaan
Pragmaattinen ratkaisu. Hyvin WordPressmäinen.
Heartbeat ja suorituskyky
Tässä kohtaa alkaa usein paniikki.
“Heartbeat kuormittaa palvelinta!”
“Heartbeat tappaa CPU:n!”
“Heartbeat tekee sivustosta hitaan!”
Totuus on vähemmän dramaattinen ja enemmän kontekstisidonnainen.
Heartbeat API:
-
on kevyt per pyyntö
-
mutta tapahtuu säännöllisesti
-
ja kertyy mittakaavassa
Yksi pyyntö ei ole ongelma. Sata käyttäjää voi olla.
Kuormituksen psykologia
Heartbeat-ongelmat eivät yleensä johdu siitä, että Heartbeat olisi huonosti suunniteltu.
Ne johtuvat siitä, että:
-
liikenne kasvaa
-
hosting on rajallinen
-
lisäosat lisäävät omaa logiikkaansa heartbeat-kutsuihin
Heartbeat toimii kuten pitää. Ympäristö ei aina pysy mukana.
Miksi Heartbeat tuntuu joskus “turhalta”?
Koska se on näkymätön.
Kun selain lähettää heartbeat-pyynnön:
-
mitään ei näy
-
mitään ei muutu visuaalisesti
-
käyttäjä ei koe hyötyä
Silti taustalla tapahtuu asioita:
-
session päivitykset
-
lukitukset
-
autosave
-
ilmoitukset
Ihmismieli arvostaa näkyviä asioita. Heartbeat on infrastruktuuria.
Heartbeat API ja lisäosat
Heartbeat API on laajennettavissa. Lisäosat voivat:
-
lisätä dataa pyyntöihin
-
lukea vastauksia
-
käyttää sykettä omiin tarkoituksiinsa
Tämä on voimakas ominaisuus.
Ja kuten aina voimakkaiden ominaisuuksien kanssa…
Se voidaan käyttää hyvin tai huonosti.
Klassinen ongelma: raskas heartbeat-logiikka
Jos lisäosa:
-
suorittaa raskaita kyselyitä
-
jokaisella heartbeat-kutsulla
-
jokaiselle käyttäjälle
Heartbeat muuttuu nopeasti CPU-myllyksi.
Ongelma ei ole APIssa. Ongelma on logiikassa.
Heartbeat API vs “reaaliaikainen web”
Heartbeat ei ole oikea reaaliaikajärjestelmä.
Se on:
-
polling-mekanismi
-
jaksottainen tarkistus
-
viiveellinen synkronointi
Mutta käytännössä se on usein riittävä.
Kaikki ei tarvitse millisekunnin tarkkuutta.
Autosave ei tarvitse. Editorilukitus ei tarvitse. Useimmat admin-toiminnot eivät tarvitse.
Heartbeat API ja sessionhallinta
Heartbeat toimii myös “elossaolotarkistuksena”.
Se auttaa WordPressiä ymmärtämään:
-
onko käyttäjä aktiivinen
-
onko sessio voimassa
-
pitäisikö jotain päivittää
Ilman tätä monet asiat olisivat kömpelömpiä:
-
vanhentuneet sessiot
-
epäselvät lukitukset
-
synkronointiongelmat
Heartbeat on hiljainen järjestyksenpitäjä.
Milloin Heartbeatista tulee ongelma?
Heartbeatista tulee ongelma, kun:
-
käyttäjiä on paljon
-
palvelinresurssit ovat rajalliset
-
heartbeat-kutsuihin on liitetty raskasta logiikkaa
-
admin-paneeli on jatkuvasti auki monella käyttäjällä
Heartbeat itsessään ei ole raskas. Kertymä on.
Skaalaus paljastaa kaiken
Monet WordPress-mekanismit toimivat täydellisesti pienessä mittakaavassa.
Heartbeat mukaan lukien.
Mutta kun:
-
käyttäjiä on satoja
-
admin on aktiivinen
-
lisäosia paljon
Pienet toistuvat operaatiot alkavat näkyä.
Heartbeat API:n elegantti rooli
Heartbeat API edustaa WordPressin filosofiaa parhaimmillaan:
-
yksinkertainen
-
yhteensopiva
-
laajennettava
-
riittävän hyvä useimpiin tarpeisiin
Se ei ole teknologinen ihme. Se on käytännöllinen työkalu.
Lopuksi: Heartbeat ei ole vihollinen
Heartbeat API saa usein syyt niskoilleen, koska se on helppo kohde.
Se näkyy verkonvälilehdellä. Se näkyy lokissa. Se näkyy kuormituksessa.
Mutta Heartbeat on harvoin varsinainen ongelma.
Se on enemmänkin kuormituksen vahvistin. Se paljastaa:
-
raskaan logiikan
-
heikon hostingin
-
huonon optimoinnin
-
resurssirajat
Heartbeat ei riko järjestelmää. Se näyttää, missä järjestelmä jo valmiiksi on hauras.
Ja siinä on jotain lähes diagnostista kauneutta.
