Vlna vylepšení — výkon importu feedov, odolnosť proxy, vypínač automatickej synchronizácie
· Infraštruktúra
Konsolidovaná vlna vylepšení za obdobie 25. 7. – 3. 8. 2026. (1) Horúca cesta importu feedov (eb4b2670, 31f9a7d8, cb790ef3) — normalizačná a importná slučka pri každom produkte a každom parametri nanovo vytvárala pomocné objekty (odstraňovač diakritiky, regulárne výrazy pre medzery a šablóny, prekladovú tabuľku Heureky); sú teraz zdieľané cez pool alebo vytiahnuté na úroveň balíčka. Telemetria nenamapovaných parametrov posielala jeden databázový dotaz na každý nenamapovaný parameter priamo v slučke nad produktmi — pri 25-tisíc produktoch novo pripojeného dodávateľa približne 250-tisíc príkazov — a zapisuje sa teraz jedným dávkovým CTE až po skončení slučky. Zároveň sa konečne uplatnil limit 10 vzorových hodnôt: dovtedy sedel na klauzule, ktorá vždy vracia práve jeden riadok, takže parametre s vysokou kardinalitou (SKU, kód dielu) rástli donekonečna a každé ďalšie zlúčenie bolo drahšie. (2) Záťaž dotazov v e-shope a v behoch automatizácií (2e22e62a, c53f3b45, 2de73b3f, 45837610, 088824b4) — invalidácia kompozitnej cache e-shopu spúšťala neohraničený prefixový sken raz na každý produkt počas fan-outu automatizácií (pri behu nad 50-tisíc produktmi približne 250 miliónov synchrónnych porovnaní na zdieľanej slučke udalostí); teraz sa zlučuje do jedného odloženého prechodu. Odporúčania cross-sell a upsell obohacujú odduplikovanú množinu produktov raz namiesto raz za každé pravidlo. Behy mapovania kategórií si kontrolu prístupu aj množinu filtrovacích pravidiel pamätajú v krátkodobej cache s jedným spoločným načítaním, kópiou pri čítaní, obmedzenou veľkosťou a bez cachovania chýb; opravený je aj súbeh, pri ktorom dotaz spustený ešte pred úpravou pravidla zapísal do cache pôvodné pravidlá. (3) Rýchlosť načítania administrácie a e-shopu (43dc1249, 8211e923, 427a6321, 18ea2c20, ea7706ea) — päť dotazov na detaile produktu čakalo na načítanie samotného produktu, hoci potrebujú len id z adresy, čo pridávalo celé jedno kolo latencie na jednej z najnavštevovanejších obrazoviek. Objednávky a detail API kľúča prestali posielať celú grafovú knižnicu (~100 kB gzip) v úvodnom balíčku a obrazovka kategórií si prestala prestavovať zdieľaný kontext pri každom stlačení klávesu, čím prekresľovala celý strom kategórií na každý znak. Na strane e-shopu idú dve nezávislé serverové načítania na detaile kategórie aj článku paralelne a predsúvanie ďalšej stránky katalógu je odložené na nečinnosť prehliadača a ruší sa pri rýchlom odchode alebo zmene filtra. (4) Vypínač automatickej synchronizácie feedov (99a78095) — dokumentovaný prepínač VENDOR_SYNC_ENABLED=false na tejto vetve nikdy nikto nečítal, takže bol tichou atrapou. Kým plánovač preháňal 42 dodávateľov, PostgreSQL sedel na 145 % CPU a požiadavky administrácie trvali 55 – 68 s — teda za hranicou, kde ich prehliadač vzdá — oproti 0,78 – 0,85 s pri stíchnutých feedoch. Obe plánované úlohy prepínač rešpektujú, ručné synchronizácie jednotlivých dodávateľov ostávajú nedotknuté a vypína len doslovná hodnota „false", aby náhodná hodnota nezastavila produkčnú synchronizáciu. (5) Odolnosť reverznej proxy (984c8b91) — proxy si meno hostiteľa helpdeskovej konzoly prekladala už pri čítaní konfigurácie, takže keď tento jeden voliteľný kontajner nebežal, nginx sa nedegradoval, ale odmietol naštartovať a padal dokola — a vzal so sebou administráciu, API a v produkcii aj všetky e-shopy a hlavnú doménu aplikácie. Preklad mena je pre túto cestu odložený na čas požiadavky: chýbajúci helpdesk teraz znamená len 502 na /helpdesk a zvyšok beží ďalej. Overené na živom stacku zastavením, reštartom aj presunom kontajnera na inú adresu. (6) Prevádzkové prepisy — únik údajov, brána na exportné feedy, záznam o predplatnom (ff01ac03, 10409574, migrácia 485) — prepisy limitov spoločnosti vrátane interného dôvodu a id pracovníka podpory sa serializovali do zákazníckej odpovede pri každom čítaní aj pri každom uložení nastavení; oba stĺpce teraz odstraňuje spoločný sanitizér a odpoveď na uloženie nastavení ide cez neho tiež. Verejná adresa exportného feedu je nanovo strážená modulom Exporty — generátor síce súbory pre spoločnosť bez modulu odmietal vyrobiť, ale tie už ležiace na disku sa servírovali ďalej — a keďže token v adrese je jediná prihlasovacia informácia neautentizovaného koncového bodu, každé odmietnutie vracia cez jediného pomocníka bajt po bajte rovnakú 404, takže uhádnutý token sa nedá potvrdiť rozdielom v odpovediach. Prevádzkový prepis modulu alebo limitu navyše prestal prepisovať záznam o predplatnom: predtým vrátil stav na „aktívne", zmazal interval fakturácie a prepečiatkoval záznam o tom, čo si zákazník naozaj kúpil. (7) Oficiálne značkové podklady, ikona aplikácie a náhľady odkazov (aaa64f5c, 473d409d) — dodávané logá boli poskladané zo živého webového písma, ktoré sa mimo aplikácie — najmä v e-maile — vykreslilo náhradným rezom; nahradili ich oficiálne obrysové vektory plus dovtedy úplne chýbajúce mono, .com, Platinum a tlačové varianty. Favikony, ikona aplikácie aj ikona pre iOS sú znovu vygenerované z originálnej grafiky (predchádzajúca mizla na tmavom pozadí prehliadača a pri 16 px), pribudol webový manifest na pridanie na plochu telefónu a obrázky pre zdieľanie odkazov spolu so základnou adresou metadát — bez nej sa náhľady skladali voči localhost a žiadny robot ich nevedel stiahnuť. Primárne tlačidlá prijali gradient schválený značkovým manuálom, riadený tokenmi, takže obe distribučné línie sa pretónujú naraz. (8) Registračný formulár a veľkosť dotykových cieľov (a7e07aa6, 46431b16) — kým sa stránka nestihla hydratovať, formulár patril prehliadaču, a formulár bez uvedenej metódy sa odosiela cez GET, teda s napísaným heslom v adresnom riadku, v histórii prehliadača aj v prístupovom logu. Formulár teraz deklaruje POST a odosielacie tlačidlo je do hydratácie zablokované. Klientská validácia dostala rovnaké dĺžkové stropy, aké vynucuje server, takže pridlhý e-mail, meno či názov spoločnosti sa ohlási v jazyku používateľa namiesto nepreloženej serverovej hlášky. Dizajnový systém si zároveň prestal protirečiť v minimálnej veľkosti dotykového cieľa: 24 px všade a reálnych 44 px na prihlásení, pozvánke, onboardingu a výzvach k nákupu. (9) Brána izolácie nájomníkov a bežce CI (4f447bfb, b44d3204, 56c6f852, migrácia 475) — kontrola izolácie dát medzi spoločnosťami nikdy nedokázala zablokovať zlúčenie: ako samostatný beh filtrovaný cestami nehlásila vôbec žiadny výsledok, keď sa nespustila, a práve preto sa dvakrát zlúčila databázová politika napísaná v nebezpečnej podobe. Teraz je súčasťou jedinej povinnej kontroly a migrácia 475 previedla dotknutú politiku na NULL-bezpečného pomocníka. Samostatne: bežce CI po reštarte hostiteľa padali dokola so starou registráciou a ich počet klesol na nulu; kontajnery si predchádzajúcu registráciu pred štartom zmažú.