Šta su Streams u Node.js?

Streams u Node.js su poput reka podataka koje teku u komadićima, omogućavajući efikasniju obradu velikih količina podataka. Razmotrimo detaljnije njihove prednosti i vrste.

Prednosti Streams

Čuva memoriju: Obradom podataka u komadićima, streams omogućavaju rad s velikim količinama podataka bez zauzimanja velike količine memorije odjednom.

Brže obrade podataka: Podaci se mogu obraditi čim prvi komad stigne, bez čekanja na kompletan set podataka, što ubrzava proces obrade.

Vrste Streams-a
  • Readable Streams: Omogućavaju čitanje podataka, poput vode koja teče iz česme.
  • Writable Streams: Omogućavaju pisanje podataka, poput sipanja vode u sudoperu.
  • Duplex Streams: Mogu istovremeno čitati i pisati podatke, slično korišćenju telefona.
  • Transform Streams: Poseban tip Duplex Streams koji može menjati podatke dok prolaze kroz stream, slično filteru za vodu.

Streams u Node.js su snažan alat za efikasnu obradu podataka u realnom vremenu. Njihova sposobnost da obrade velike količine podataka u komadićima, uz istovremeno čuvanje resursa i ubrzavanje procesa, čini ih nezamenjivim u razvoju aplikacija.

streams

Upisivanje

Upisivanje uz pomoć streama ćemo objasniti na primerima:

Primer

U ovome primeru ćemo u jednom fajlu upisati milion brojeva na dva načina. Prvi način je bez korišćenja straams-a, dok je drugi sa korišćenjem:

Izvšenje ovog koda kod mene traje oko 9 sekundi, dok će izvršenje koda sa istom namenom ali sa korišćenjem streams-a biti višestruku brže (30 puta):

u prethodnom primeru koristimo buffer ali metoda stream.write() samo može interno fa koristi buffer kada joj prosledite string. To znači da se string “Broj: ${i}\n” automatski konvertuje u Buffer pre nego što se upiše u datoteku. Stoga možemo da pojednistavimo kod:

Drain

Događaj drain igra ključnu ulogu u upravljanju protokom podataka, posebno kada radite sa writable streams (tokovima za upis). Ovaj događaj vam pomaže da efikasno upravljate memorijom i protokom podataka kako biste izbegli preopterećenje buffer-a writable stream-a.

Kada upisujete podatke u writable stream pomoću stream.write(data), ova metoda vraća false ukoliko je interni buffer stream-a dosegnuo svoju maksimalnu granicu (high-water mark). Ovo je signal da treba prestati sa slanjem podataka na stream dok se ne oslobodi neki prostor u buffer-u.
U tom trenutku, trebalo bi da prestanete sa slanjem podataka i čekate dok se buffer ne isprazni dovoljno da prihvati nove podatke. Događaj drain se emituje kada se to desi, tj. kada je stream spreman da ponovo prihvati podatke nakon što je bio zagušen.

Podelite:

Ostavite komentar