Hacker News

API ta' flussi aħjar hija possibbli għal JavaScript

Kummenti

15 min read Via blog.cloudflare.com

Mewayz Team

Editorial Team

Hacker News

L-API Streams ta' JavaScript għandha Problema — U l-Iżviluppaturi Fl-aħħar Qed Jitkellmu dwarha

Jekk qatt ippruvajt tuża l-Streams API f'JavaScript għal xi ħaġa lil hinn minn eżempju ta' ktieb tat-test, ħassejt il-frizzjoni. Dak li għandu jkun astrazzjoni eleganti u composable għall-immaniġġjar tad-dejta sekwenzjali - qari ta 'fajls, ipproċessar ta' tweġibiet HTTP, trasformazzjoni ta 'settijiet ta' dejta f'ħin reali - ħafna drabi jiddevoluta fi boilerplate verbose, semantika ta 'backpressure konfuża, u wiċċ API li jħoss aktar bħal Java intrapriża milli JavaScript modern. Il-konversazzjoni dwar il-bini ta 'primittiv ta' streaming aħjar ilha ttektek fi proposti TC39, diskussjonijiet ta 'qafas, u proġetti ta' sors miftuħ għal snin. Fl-2026, qed jilħaq il-punt ta' tmiem. Il-mistoqsija mhix jekk API streams aħjar hijiex possibbli — huwa dak li fil-fatt jidher "aħjar", u dak li qed iżżommna lura.

Fejn l-API Current Streams Taqa' Qasira

L-Istandard WHATWG Streams, li jsaħħaħReadableStream, WritableStream, u TransformStream madwar browsers u runtimes bħal Node.js u Deno, kien kisba ta' inġinerija ġenwina. Hija ġabet kontropressjoni, kanċellazzjoni, u iterazzjoni asinkronizzata għall-immaniġġjar tad-dejta nattiva tal-web. Iżda fil-prattika, l-API titlob wisq mill-iżviluppatur għal operazzjonijiet komuni. Il-ħolqien ta' fluss ta' trasformazzjoni sempliċi jeħtieġ li tisstanzja TransformStream b'metodu ta' trasforma, ġestjoni tal-kontrolluri, u ġestjoni bir-reqqa tas-semantika ta' flush — kollha għal dak li jammonta għal map() fuq biċċiet.

Qabbel dan ma' kif l-iżviluppaturi jaħdmu ma' arrays. Array.prototype.map(), filter(), u reduce() huma kompostibbli, jinqraw, u jeħtieġu kważi żero ċerimonja. L-API Streams ma toffri xejn minn din il-komposibbiltà ergonomika barra mill-kaxxa. Piping streams flimkien permezz ta' .pipeThrough() jaħdem, iżda l-bini tal-istadji tat-trasformazzjoni nfushom huwa fejn l-iżviluppaturi jitilfu s-sigħat u l-paċenzja. L-immaniġġjar tal-iżbalji tul il-ktajjen tal-pajpijiet huwa punt ieħor ta' uġigħ — l-iżbalji ma jinfirxux b'mod intuwittiv, u d-debugging ta' pipeline miksur ħafna drabi jfisser li ddaħħal trasformazzjonijiet temporanji tal-illoggjar biss biex insemmu fejn id-dejta qed tinżel jew tkun korrotta.

Hemm ukoll l-iljunfant Node.js fil-kamra. Node għandu l-implimentazzjoni tal-kurrent tagħha stess (stream.Readable, stream.Writable), li qabel l-istandard WHATWG bi kważi għaxar snin. Iż-żewġ sistemi huma interoperabbli biss permezz ta 'utilitajiet tal-adapter, u ħafna pakketti npm għadhom jużaw l-API anzjani. L-iżviluppaturi li jaħdmu f'ambjenti differenti — rendering min-naħa tas-server, funzjonijiet edge, ipproċessar ibbażat fuq il-browser — huma sfurzati jġolaw żewġ astrazzjonijiet inkompatibbli għall-istess kunċett.

Liema Better Streams API Jista' Jidher

Diversi proposti u esperimenti komunitarji jindikaw lejn futur aktar faċli għall-iżviluppaturi. L-ideat tal-qalba jibqgħu jikkonverġu fuq ftit prinċipji:kompożizzjoni funzjonali,allinjament tal-iteratur asinkroniku, uboilerplate imnaqqas. Immaġina li tista’ tikteb pipelines ta’ data streaming b’mod naturali daqskemm tikteb trasformazzjonijiet ta’ firxa — tikkatina .map(), .filter(), u .take() direttament fuq fluss li jinqara mingħajr il-bżonn li jinbnew oġġetti TransformStream intermedji.

Dan mhux ipotetiku. Il-proposta Iterator Helpers (issa fl-Istadju 4 f'TC39) diġà ġġib .map(), .filter(), .take(), .drop(), u .flatMap() għal synchronous iterators. L-estensjoni ta' dan il-mudell għal iteraturi asinkroniċi — u b'estensjoni, għal flussi li jinqraw li jesponu [Symbol.asyncIterator] — huwa pass naturali li jmiss. Xi runtimes u libreriji diġà bdew jesperimentaw b'dan l-approċċ, u ħallew lill-iżviluppaturi jiktbu kodiċi bħal:

L-aktar estrazzjoni qawwija ta' streaming hija waħda li tisparixxi. Meta l-iżviluppaturi jistgħu jesprimu trasformazzjonijiet tad-dejta bħala katina ta’ funzjonijiet sempliċi — mingħajr ma joqogħdu jinkwetaw dwar il-kontrolluri, l-istrateġiji tal-kju, jew il-backpressure manwali — jibnu aktar malajr, jibagħtu inqas bugs, u fil-fatt igawdu jaħdmu ma’ data streaming.

L-għan mhuwiex li l-API ta' Streams ta' livell baxx tissostitwixxi kompletament. Dejjem se jkun hemm każijiet ta 'użu — protokolli tad-dwana, kontroll tal-memorja fin, implimentazzjonijiet ta' codec binarji — fejn l-aċċess dirett għall-kontrollur huwa essenzjali. Iżda għall-90% tal-każijiet ta 'użuli jinvolvu qari, trasformazzjoni, u kitba ta' data sekwenzjali, is-saff ta 'l-astrazzjoni għandu jaqbel mas-sempliċità tal-kompitu.

Lezzjonijiet Minn Ekosistemi Oħra

JavaScript mhuwiex l-ewwel lingwa li tiġġieled mal-ergonomija tal-istreaming. Il-karatteristiċi ta 'IteraturuStream ta' Rust joffru astrazzjoni composable, ta 'spiża żero li tħalli lill-iżviluppaturi jikkatinaw operazzjonijiet mingħajr ma jallokaw kollezzjonijiet intermedji. Il-modulu Stream ta 'Elixir jipprovdi enumerazzjoni għażżien b'sintassi nadifa u faċli għall-pajpijiet. Anke Java, spiss ikkritikat għall-verbożità, introduċa java.util.stream.Stream f'Java 8 b'API fluwenti li l-iżviluppaturi tal-JavaScript kienu jirrikonoxxu u jgħajru.

Dak li jaqsmu dawn l-ekosistemi huwa impenn biextagħmel il-każ komuni trivjali. Il-qari ta' fajl, l-iffiltrar tal-linji u l-kitba tar-riżultati jieħdu 3-5 linji ta' kodiċi composable. Fl-API Streams attwali ta' JavaScript, l-istess operazzjoni tista' faċilment tespandi għal 20-30 linja meta tqis il-kostruzzjoni tal-flussi, l-immaniġġjar tal-iżbalji, u t-tneħħija xierqa. Id-distakk mhuwiex dwar il-kapaċità — huwa dwar l-ergonomija.

L-approċċ ta' Python huwa wkoll istruttiv. Il-funzjonijiet tal-ġeneratur b'rendiment jipprovdu mod naturali biex tipproduċi u tikkonsma data sekwenzjali għażżien. JavaScript għandu wkoll funzjonijiet ta' ġeneratur, iżda li jgħaqqduhom mal-API ta' Streams jeħtieġ li jitgeżwruhom f'kostrutturi ReadableStream b'kontrolluri bbażati fuq il-ġibda. Integrazzjoni aktar stretta bejn il-ġeneraturi u l-flussi — fejn funzjoni ta' ġeneratur tista' ssir direttament nixxiegħa li tinqara — telimina kategorija sħiħa ta' boilerplate.

L-Impatt tad-Dinja Reali fuq l-Iżvilupp ta' Applikazzjoni

Din mhix tħassib akkademiku. L-istreaming tad-dejta huwa fil-qalba tal-applikazzjonijiet moderni tal-web. Avvenimenti mibgħuta mis-server, tweġibiet HTTP imqassma, dashboards analitiċi f'ħin reali, proċessar ta 'upload ta' fajls, streaming tal-output tal-mudell AI - dawn huma karatteristiċi ta 'kuljum, mhux każijiet edge. Meta l-primittiv tal-istreaming ikun diffiċli biex jintuża, l-iżviluppaturi jew jevitawha kompletament (jibferixxu kollox fil-memorja, li ma tiskalax) jew jibnu pipelines fraġli u diffiċli biex jinżammu li jsiru sors ta' inċidenti ta' produzzjoni.

Ikkunsidra x'jiġri fuq skala kbira. Pjattaforma bħalMewayz, li tipproċessa data fuq 207 moduli ta 'negozju integrati — minn pipelines CRM u fatturazzjoni għal kalkoli tal-pagi u traċċar tal-flotta — timmaniġġja volumi enormi ta' data sekwenzjali internament. Operazzjonijiet ta' esportazzjoni, ġenerazzjoni ta' rapporti, ipproċessar ta' avvenimenti tal-webhook, u aġġornamenti tad-dashboard f'ħin reali kollha jibbenefikaw minn streaming effiċjenti. Meta l-primittivi tal-lingwa sottostanti jagħmlu l-istreaming diffiċli, l-ispiża timmultiplika f'kull modulu u f'kull fluss tad-dejta. L-inġiniera tal-pjattaforma jispiċċaw jibnu astrazzjonijiet interni ta' streaming fuq l-astrazzjonijiet tal-lingwa, u jżidu kumplessità li m'għandhiex tkun meħtieġa.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →
  • Ipproċessar tal-fajls: It-tlugħ u l-parsing ta’ fajls CSV b’100K+ ringieli jeħtieġ streaming biex jiġi evitat l-eżawriment tal-memorja — iżda l-API attwali tagħmel it-trasformazzjoni bażika ta’ ringiela b’ringiela saħansitra verbose
  • Dashboards f'ħin reali: L-istrimjar tad-dejta analitika minn server għal klijent permezz ta' SSE jew WebSocket jibbenefika minn trasformazzjonijiet kompostibbli (aggregazzjoni, filtrazzjoni, throttling) li huma ta' uġigħ biex jesprimu llum
  • Istrimjar tar-rispons AI: Hekk kif il-karatteristiċi li jaħdmu bl-LLM isiru standard fl-għodod tan-negozju, l-istriming tar-reazzjonijiet token b'token għall-IU huwa aspettattiva bażika — u każ ta' użu perfett għal trasformazzjonijiet ta' stream chainable
  • Operazzjonijiet tal-lott: L-ipproċessar tal-pagi għal eluf ta’ impjegati, il-ġenerazzjoni ta’ fatturi bl-ingrossa, jew is-sinkronizzazzjoni tar-rekords tas-CRM ma’ sistemi esterni kollha jinvolvu streaming ta’ data permezz ta’ stadji ta’ validazzjoni, trasformazzjoni u output
  • Pipelines tal-Webhook: L-inġestjoni, il-validazzjoni, ir-rotot, u l-ipproċessar ta’ avvenimenti tal-webhook deħlin minn integrazzjoni ta’ partijiet terzi hija intrinsikament tagħbija ta’ xogħol ta’ streaming

X'Qed Jiġi Propost Attwalment

L-ekosistema JavaScript qed timxi fuq diversi fronti. Il-proposta TC39Iterator Helpersdiġà waslet, u ġabet kompożizzjoni funzjonali għal iteraturi sinkroniċi. L-estensjoni naturali — Async Iterator Helpers — iġġib l-istess metodi .map(), .filter(), .reduce(), .take(), u .flatMap() biex jimplimentaw iteraturi asinkroniċi, li diġà jistgħu jinqraw. [Symbol.asyncIterator]. Dan waħdu jtejjeb b'mod drammatiku l-esperjenza tal-iżviluppatur għall-mudelli ta' streaming l-aktar komuni.

Lil hinn minn TC39, l-innovazzjonijiet fil-livell tar-runtime qed jimbuttaw ukoll il-konfini. Deno esperimenta b'utilitajiet tan-nixxiegħa aktar ergonomiċi. Il-Kaxxa tal-Għodda tal-Web Streamsu libreriji komunitarji simili jipprovdu funzjonijiet helper li jkebbew il-partijiet verbose tal-API. U hemm momentum dejjem jikber wara l-idea ta 'librerija standard nattiva tal-flussi — sett ta' utilitajiet integrati u ottimizzati għal operazzjonijiet ta 'streaming komuni bħall-qsim tal-linji, parsing JSON, ipproċessar CSV, u kompressjoni li l-iżviluppaturi bħalissa jiġbdu minn npm.

Hemm ukoll argument konvinċenti għalsemantika aħjar tal-iżbalji. Fl-API tal-lum, żball f'katina bil-pajpijiet jista 'jħalli flussi fi stati ambigwi - parzjalment ikkunsmat, b'serraturi dangling fuq il-qarrejja. API riveduta tista' tadotta propagazzjoni strutturata ta' żball simili għat-tip Riżultat ta' Rust jew tadotta konvenzjoni fejn l-iżbalji jgħaddu mill-pipeline bħala valuri, li jippermettu lill-istadji downstream jimmaniġġjaw jew jirkupraw minnhom mingħajr ma jkissru l-katina kollha. Dan ikun trasformattiv għall-affidabilità tal-produzzjoni.

Għaliex Dan Jgħodd Aktar minn Qatt fl-2026

Tliet tendenzi konverġenti jagħmlu l-ergonomija tal-API tal-istriming aktar urġenti issa milli fi kwalunkwe punt fl-istorja ta' JavaScript. L-ewwel, edge computing — Cloudflare Workers, Vercel Edge Functions, Deno Deploy — topera taħt restrizzjonijiet stretti ta 'memorja u CPU fejn il-buffering ta' risponsi sħaħ jew settijiet ta 'dejta sempliċement mhux vijabbli. L-istreaming huwa l-unika għażla, u l-iżviluppaturi li jużaw dawn l-ambjenti jeħtieġu API li ma jiġġieldux magħhom.

It-tieni, l-integrazzjoni AI għamlet l-istreaming karatteristika li tiffaċċja l-utent. Meta assistent tal-AI jiġġenera rispons, l-utenti jistennew li jaraw it-tokens jidhru f'ħin reali, mhux jistennew li r-rispons kollu jiġi buffer. Kull pjattaforma SaaS — minn sistemi operattivi tan-negozju bħal Mewayz għal għodod awtonomi tal-AI — issa teħtieġ konsum tal-fluss robust min-naħa tal-klijent. L-API attwali taħdem għal dan, iżda l-esperjenza tal-iżviluppatur tal-parsing, it-trasformazzjoni u l-għoti tal-output tal-AI streamed tista' tkun aħjar b'mod sinifikanti b'operaturi ta' stream composable.

It-tielet, il-moviment full-stack JavaScript ifisser li l-iżviluppaturi qed jimmaniġġjaw flussi fuq iż-żewġ naħat tal-konfini tan-netwerk. Inġinier wieħed jista' jikteb fluss fuq in-naħa tas-server li jipproċessa r-riżultati tal-mistoqsijiet tad-database, iwassalhom permezz ta' trasformazzjoni, jibgħathom bħala rispons HTTP imqassam, u mbagħad jikkonsma dak l-istess fluss fuq il-klijent biex jagħmel UI progressiva. Meta l-API streaming tkun skomda, dik il-frizzjoni tinħass f'kull saff tal-munzell.

Nimxu 'l quddiem: X'Jistgħu Jagħmlu l-Iżviluppaturi Illum

Filwaqt li l-lingwa tevolvi, l-iżviluppaturi mhumiex mwaħħlin jistennew. Diversi strateġiji prattiċi jistgħu jtejbu l-esperjenza tal-istreaming fi proġetti kurrenti. L-użu ta' ġeneraturi asinkroniċi bħala l-mudell tal-awtur primarju — u t-tgeżwir tagħhom f'ReadableStream.from() fejn ir-runtime jappoġġjaha — jipprovdi sintassi ħafna aktar nadifa mill-ġestjoni manwali tal-kontrollur. Libreriji bħalit-pipeustreaming-iterables joffru helpers composable li jġibu katina funzjonali għal iteraturi async illum.

Għat-timijiet li jibnu applikazzjonijiet intensivi fid-dejta, l-investiment f'saff ta' utilità ta' streaming intern irqiq iħallas id-dividendi. Sett ta' funzjonijiet streamMap(), streamFilter(), u streamBatch() ddisinjati tajjeb — kull wieħed jieħu iterable async u jirritorna iterable async — jipprovdi l-kompożibbiltà li l-API standard hija nieqsa, mingħajr il-piż ta' qafas sħiħ ta' streaming. Dan huwa l-mudell li jiskala minn prototipi tal-istartjar għal pjattaformi li jimmaniġġjaw miljuni ta' operazzjonijiet.

  1. Adotta ġeneraturi asinkroniċi bħala l-mudell predefinit tiegħek biex tipproduċi dejta streaming — huma aktar nodfa, aktar ttestjati, u aktar komposti mill-kostruzzjoni manwali ReadableStream
  2. Uża ReadableStream.from() biex tgħaqqad l-iterables asinkroniċi fid-dinja tal-flussi tal-web meta jkollok bżonn interop mal-APIs li jistennew istanzi ta' ReadableStream
  3. Ibni jew tadotta funzjonijiet ta' utilità rqiqa għal operazzjonijiet komuni (mappa, filtru, lott, throttle) fuq iterables asinkroniċi aktar milli jinbnew oġġetti TransformStream
  4. Avukat f'TC39 u diskussjonijiet dwar ir-runtime — il-proposta tal-helpers tal-iteraturi asinkronizzati teħtieġ vuċijiet tal-iżviluppaturi li jimbuttaw għall-prijoritizzazzjoni
  5. Ikteb testijiet kontra iterables async, mhux streams direttament — dan jagħmel il-loġika tal-istreaming tiegħek portabbli u aktar faċli biex tiġi vvalidata

L-API JavaScript Streams kienet pedament meħtieġ. Iżda l-pedamenti huma maħsuba biex jinbnew fuqhom, u s-saff ta 'astrazzjoni li jmiss - wieħed li jagħmel l-istreaming naturali daqs ix-xogħol ma' arrays - huwa skadut. Il-biċċiet huma f'posthom: iteraturi asinkronizzati, funzjonijiet tal-ġeneratur, u l-mudell tal-helpers tal-iteraturi. Dak li hemm bżonn issa hija r-rieda kollettiva li jinġabruhom fi standard li jaqbel kif l-iżviluppaturi fil-fatt jaħsbu dwar id-dejta sekwenzjali. Ir-riżultat mhux se jkun biss API aħjar — se jinfetaħ l-istreaming bħala mudell default aktar milli l-aħħar għażla, u jagħmel l-applikazzjonijiet aktar mgħaġġla, aktar effiċjenti fil-memorja, u aktar pjaċevoli biex jinbnew.

Mistoqsijiet Frekwenti

X'inhu ħażin fl-API kurrenti JavaScript Streams?

L-API Streams attwali tbati minn boilerplate eċċessiv, semantika ta' backpressure konfuża, u wiċċ API kumpless żżejjed li jiskoraġġixxi l-adozzjoni. Ħidmiet sempliċi bħall-qari ta 'fajl jew l-ipproċessar ta' tweġiba HTTP jeħtieġu ħafna aktar kodiċi milli meħtieġ. L-iżviluppaturi ħafna drabi jirrikorru għal libreriji ta' partijiet terzi jew mudelli eqdem bħal callbacks u emitters ta' avvenimenti, billi jaqbżu l-istandard għal kollox minħabba li l-ergonomija jħossu eqreb lejn l-intrapriża Java milli l-JavaScript modern.

Kif Streams API aħjar ittejjeb l-iżvilupp tal-web?

API ta' Streams imfassal mill-ġdid b'sintassi aktar nadifa, appoġġ integrat ta' iterazzjoni asinkronizzata, u metodi ta' kompożizzjoni intuwittivi jissimplifikaw b'mod drammatiku l-ipproċessar tad-dejta f'ħin reali. L-iżviluppaturi jistgħu jikkatinaw trasformazzjonijiet b'mod naturali, jimmaniġġjaw il-backpressure b'mod trasparenti, u jiktbu pipelines streaming fi frazzjoni tal-kodiċi. Dan jagħmel ir-rendi progressiv, l-informazzjoni diretta u l-ipproċessar ta' fajls kbar aċċessibbli għal kull żviluppatur ta' JavaScript, mhux biss għal dawk li lesti jiġġieldu ma' primittivi ta' livell baxx.

Jistgħu l-pjattaformi tan-negozju moderni jimmaniġġjaw l-istrimjar tad-dejta f'ħin reali b'mod effettiv?

Iva — pjattaformi bħal Mewayz, OS tan-negozju ta' 207 moduli li jibda minn $19/mes, diġà jħaddmu pipelines ta' data effiċjenti wara l-kwinti għal analitika, flussi tax-xogħol ta' awtomazzjoni, u rappurtar dirett. Hekk kif l-istandards tal-istreaming jitjiebu f'JavaScript, għodod mibnija fuq il-web stack se jwasslu esperjenzi aktar mgħaġġla f'ħin reali, minn aġġornamenti immedjati tad-dashboard għal proċessar bla xkiel tal-fajls fil-moduli tan-negozju integrati.

X'alternattivi jeżistu waqt li l-API Streams tevolvi?

L-iżviluppaturi bħalissa jiddependu fuq libreriji bħal Node.js streams, RxJS għal programmar reattiv, jew ġeneraturi asinkroniċi flimkien ma' for-wait-of loops biex jimmaniġġjaw id-dejta sekwenzjali b'mod aktar ergonomiku. Polyfills kompatibbli mal-web u helpers tal-istadju tal-proposta wkoll inaqqsu l-lakuni fl-API standard. Iċ-ċavetta hija li tagħżel astrazzjonijiet li jallinjaw mal-każ tal-użu tiegħek — kemm jekk dan ifisser xejriet osservabbli għal applikazzjonijiet b'ħafna avvenimenti jew iterazzjoni asinkronika sempliċi għal kompiti sempliċi ta' trasformazzjoni tad-dejta.