Kai puslapis atsidaro per sekundę – tai ne atsitiktinumas
Atsidarai naujienų portalą, paspaudžiai ant straipsnio ir – bum – turinys jau čia, be jokio pilno puslapio perkrovimo. Atrodo kaip smulkmena, bet už šio elgesio slypi visa architektūrinė filosofija, kuri lemia ne tik greitį, bet ir tai, ar apskritai skaitytojas pasiekia informaciją tada, kai ji jam reikalinga.
SPA – Single Page Application – reiškia, kad naršyklė iš esmės vieną kartą atsisiunčia visą aplikacijos „skeletą” ir toliau keičia tik turinį, bendraujama su serveriu per API užklausas. Tradiciniame modelyje kiekvienas paspaudimas = naujas serverio atsakas = naujas pilnas puslapis. SPA modelyje naršyklė pati tvarko navigaciją, o serveris tiekia tik duomenis – dažniausiai JSON formatu.
Kodėl naujienų portalai tai mėgsta
Naujienų svetainė – tai ne el. parduotuvė ir ne korporatyvinis vizitinės kortelės puslapis. Čia turinys keičiasi nuolat, skaitytojai šokinėja tarp straipsnių, o redakcija nori, kad žmogus kuo ilgiau liktų platformoje. SPA šiame kontekste duoda keletą apčiuopiamų pranašumų.
Pirma – greitis. Kai navigacija vyksta kliento pusėje, nereikia laukti, kol serveris sugeneruos visą HTML. Vartotojas jaučia, kad viskas veikia sklandžiai, beveik kaip native aplikacija. Antra – galimybė rodyti turinį dinamiškai: naujausios žinios atsinaujina be puslapio perkrovimo, breaking news juosta gyva realiuoju laiku, komentarai pasirodo be F5 paspaudimo.
Trečia, ir tai dažnai pamirštama – analitika. SPA leidžia tiksliau sekti vartotojo kelionę puslapyje: kiek laiko praleido ties konkrečia pastraipa, kur slinkimas sustojo, kas privertė uždaryti skirtuką. Redakcijoms tai – auksas.
Bet čia prasideda ir problemos
SPA nėra stebuklinga lazdelė. Didžiausia skausmo vieta – SEO ir pirminis įkėlimas. Kai paieškos robotas ateina į puslapį, jis dažnai mato tuščią HTML su krūva JavaScript nuorodų. Turinys dar neįkrautas, nes jis atsiranda tik po to, kai JavaScript įvykdomas naršyklėje. Google robotas teoriškai moka vykdyti JS, bet praktika rodo, kad indeksavimas vėluoja, o tai naujienų portalui gali reikšti, kad straipsnis paieškoje atsiras per vėlai – kai tema jau atšalo.
Sprendimas – serverio pusės renderingas (SSR) arba hibridiniai sprendimai kaip Next.js. Tada pirmasis puslapis atkeliauja jau su pilnu HTML, o tolesnė navigacija vyksta SPA logika. Tai geriausias abiejų pasaulių derinys, bet ir sudėtingesnis infrastruktūros požiūriu.
Kita problema – JavaScript bundle dydis. Jei portalas neoptimizuoja kodo skaidymo (code splitting), vartotojas iš karto atsisiunčia viską – ir straipsnio skaitytuvą, ir redakcijos valdymo įrankius, ir reklamų sistemą. Mobiliuoju ryšiu tai gali reikšti kelias papildomas sekundes, o tyrimai rodo, kad kiekviena papildoma sekundė – tai dalis skaitytojų, kurie tiesiog uždaro skirtuką.
Realaus laiko informacija – kur SPA tikrai šviečia
Rinkimų naktis. Sporto rungtynių rezultatai. Krizinė situacija, kai kiekviena minutė svarbi. Būtent čia SPA architektūra parodo savo tikrąją vertę. WebSocket jungtys arba Server-Sent Events leidžia portalui „klausytis” serverio ir atnaujinti turinį vos tik atsiranda nauja informacija – be jokio vartotojo įsikišimo.
Tradicinis puslapis tokiam scenarijui reikalauja arba nuolatinio puslapio perkrovimo, arba sudėtingų polling mechanizmų. SPA su WebSocket – tai tiesiog atviras kanalas tarp naršyklės ir serverio, kuris gyvas tol, kol vartotojas skaito.
Kai architektūra tampa žurnalistikos klausimu
Galima manyti, kad tai grynai techniniai reikalai – programuotojų teritorija. Bet iš tikrųjų sprendimas, kaip portalas veikia po gaubtu, tiesiogiai veikia žurnalistinę misiją. Jei straipsnis neindeksuojamas laiku – jo niekas neranda. Jei puslapis lėtas – skaitytojas išeina pas konkurentą. Jei realaus laiko atnaujinimai neveikia – portalas pralošia socialiniams tinklams, kurie informaciją paskleidžia greičiau.
SPA architektūra, tinkamai įgyvendinta su SSR, protingu kodo skaidymu ir realaus laiko jungtimis, yra ne tik techninis pasirinkimas – tai redakcinis sprendimas. Jis sako: mes norime, kad skaitytojas informaciją gautų greitai, patikimai ir be trikdžių. O kai tas sprendimas priimamas neapgalvotai – techninis skolinimasis virsta žurnalistine kaina, kurią moka ne programuotojai, o skaitytojai.