Nazad na blog
Miloš Krstić2 min čitanja

Skrivena cena prekomernog state management-a

Skrivena cena prekomernog state management-a
Kliknite na sliku za uvećanje

U svetu Angular razvoja postoji mit koji se stalno ponavlja: "Ako je u pitanju Enterprise aplikacija, neophodan ti je globalni store." Svi smo to videli-stotine fajlova punih boilerplate koda, akcije za najobičnije inpute u formama i selektori koji ne rade ništa osim što čitaju jedan jedini property.

Ali surova istina je sledeća: Svaka linija koda koju niste morali da napišete je dug koji nećete morati da otplaćujete.

Porez na "Boilerplate"

Kada prerano uskočimo u NgRx (ili slične biblioteke zasnovane na Redux šablonu), plaćamo ogroman "porez na boilerplate". Za jednu običnu funkcionalnost, odjednom vam je potrebno:

  • Akcija da pokrene poziv.
  • Effect da obradi API.
  • Još dve Akcije za Success/Failure.
  • Reducer da ažurira stanje.
  • Selektor da to isto stanje pročita.

Dok sve ovo povežete, izmenili ste pet fajlova samo da biste prikazali listu korisnika. Ova fragmentacija čini kod težim za praćenje, težim za refaktorisanje i značajno usporava uvođenje novih developera u projekat.

Signali: Promena pravila igre

Dolaskom Angular Signala, argumenti za globalni state management su dodatno oslabili. Signali pružaju preciznu (fine-grained) reaktivnost koja je:

  1. Sinhrona: Nema više "race condition" problema sa async pajpovima.
  2. Lokalna po definiciji: Stanje treba da živi tamo gde se koristi.
  3. Performantna: Osvežava change detection samo tamo gde je neophodno, što nam pomaže da lakše stignemo do onih 100/100 Lighthouse rezultata.

Kada VAM JE ZAISTA potreban NgRx?

Nije problem u tome što je NgRx loš, već u tome što se prečesto koristi. On vam je zaista potreban samo kada:

  • Iste podatke koriste i menjaju višestruki, nepovezani delovi aplikacije.
  • Vam je potrebna kompleksna undo/redo funkcionalnost.
  • Imate strimove podataka visoke frekvencije koji zahtevaju centralizovanu obradu.

Zaključak

Prestanite da pravite lavirinte od akcija, reducera i selektora za obične CRUD operacije. Koristite Signale za lokalno stanje, Servise za deljenu logiku, a tešku artiljeriju čuvajte za onih 5% aplikacije koji je zapravo zahtevaju.

Vaše buduće "ja" (i vaša veličina bundle-a) će vam biti zahvalni.

Imate sličan frontend problem?

Zatražite Frontend Dijagnozu
  • Identifikujte uska grla u performansama
  • Uočite probleme u arhitekturi
  • Dobijte konkretne preporuke
Analiziraj frontend arhitekturu