Un instantaneu sesiune pentru fila, nici unul pe instanță cârlig

Performancekamo-internal
Expediere
26 august 2026 la 05:40 UTC
Autor
kamo
Comite
2241a5c

useUserInfo a avut loc sesiunea sa în trei celule utilizateState. Are 187 de site-uri de apel și aproximativ 27 de Acestea sunt montate pentru întreaga sesiune ă Solicitarea a fost deja coalesced, astfel încât nu a fost niciodată doar un singur apel /api / utilizator-info, dar atunci când a rezolvat toate cele 27 de cazuri numite propriul setUserInfo cu aceleași date. 27 Actualizări de reacţie independente care poartă stare identică, pe fiecare filă şi la fiecare cinci minute Bifați. Statul se mută într-un magazin de module în spatele utilizăriiSyncExternalStore, astfel încât o reîmprospătare este un singur scrie si un lot de a face trece. Magazinul este app/lib/userInfoStore.ts mai degrabă decât un modul local cârlig pentru un motiv specific: Nimic din acest repo nu poate prinde o regresie a drepturilor. Nu există nici un @testing-library, nici un test Montează o componentă, și app/hooks/** nu este în lista Vitest include Cârligul ar trece nepedepsit. app/lib/** este inclus, astfel încât regulile care poarta drepturile peste produsul are acum 25 de teste care acoperă fiecare cale de scriere. Trei proprietăți sunt purtătoare de sarcină și fiecare este fixat de un test: Încarcarea începe cu adevărat și este o încuietoare cu sens unic. Gardienii drepturilor cad la un DENY, nu la a wait, and checkRight deschide cu încărcare: fals înainte de sosirea datelor face "nici o permisiune" pentru un membru care deține dreptul; și focuri de 20 remiză neîncărcată. Nimic nu se prăbuşeşte şi niciun test nu dă greş. De asemenea, nu trebuie să se întoarcă la adevărat, sau fiecare paznic din aplicație își aprinde starea de încărcare la fiecare cinci minute. Scrierile sunt doar prin intermediul unui browser. Pe server un proces servește fiecare concurent cerere, astfel încât o variabilă modul deține drepturile unui membru este una împărtășită cu fiecare alte redă membru. publică() refuză să scrie fără fereastră și obțineServerSnapshot întoarce a constanta inghetata in loc sa citeasca instantaneuul mutabil. Această constantă este, de asemenea, obligatorie: Shell autentificat este server-redare și acest cârlig este atins în timpul trece serverul de la arborele client al rădăcinii, unde React 19 aruncă în loc să cadă înapoi, fără limite Authed Chrome să-l prindă. Imaginile sunt ţinute, niciodată reconstruite. încarcăUserInfoShare returnează un obiect proaspăt parsat fiecare timp, motiv pentru care toate cele 27 de cazuri re-redare; un getSnapshot care a construit unul ar Nu doar re-redare, dar arunca. Încărcăturile utile echivalente nu mai sunt publicate deloc, astfel încât consumatorii keying memo-uri off utilizatorInfo identitate Rezumarea la fiecare cinci minute pentru o sarcină utilă care nu s-a schimbat. Trei decizii merită numite, pentru că fiecare avea o alternativă defensivă: Navigarea /logout este acum poarta pe acolo fiind un abonat. Vechiul este MountedRef garda așezat deasupra comutatorului, nu pe un SetState, astfel încât a sărit prea redirecționare mijlocul zborului nu a navigat. Eliminarea directă a arbitrului, care este mişcarea obişnuită la adoptarea modulul magazin, ar fi promovat în tăcere această redirecționare de la condițional la necondiționat. Numai prima încărcătură este în prim-plan; mai târziu montază reîmprospătare în fundal. Drepturile rămân proaspete pe navigare ca înainte, dar o eroare tranzitorie pe un mont târziu nu mai poate goli utilizatorulInfo pentru toți cei 27 de consumatori atunci când a fost anterior doar necompletat o instanță care a lovit-o. Cei șapte apelanți externi de încărcareUserInfoShare nu publică în mod deliberat. Ei trag asupra websocket reconectați la momente arbitrare, și de conducere gating produsului de pe o suprafață de declanșare nimeni nu se uita este mai rău decât impasul limitat de a nu face acest lucru identitatea care nu se poate schimba în cadrul unei sesiuni. Accesoriile sunt lăsate ca săgeţi simple intenţionat. Stabilizarea lor este instinctul natural aici și ar rupe în tăcere nouă site-uri de apel PlatformRightsContext și alte șase Calculând o dată împotriva unui instantaneu nul în schimb. Intrarea /logout permis în check-client-navigare. MJs urmează linia pentru care există. Verificat: TSC curat, toate 10 gardieni trece, 3286 teste verde, productie construi compilatii, si serverul independent încă redă cochilia autentificată elemente, două antete, zece butoane, My Businesses / My Profile / Log out. Vrea un om click prin intermediul nav-drepturi, un membru cu drepturi limitate, și o sesiune de expirare înainte de aceasta nave.

Toate modificările

Ca ceea ce vezi de transport maritim?

Fiecare dintre aceste actualizări aterizează automat în spațiul de lucru. Începe gratuit și urmăriți-l crească săptămână după săptămână.

Pornește gratuit pentru totdeaunaVezi prețurile