Hacker News

Tha API sruthan nas fheàrr comasach airson JavaScript

Beachdan

18 min read Via blog.cloudflare.com

Mewayz Team

Editorial Team

Hacker News

Tha duilgheadas aig JavaScript's Streams API - agus tha luchd-leasachaidh mu dheireadh a’ bruidhinn mu dheidhinn

Ma dh’ fheuch thu a-riamh ris an Streams API a chleachdadh ann an JavaScript airson rud sam bith nas fhaide na eisimpleir leabhar-teacsa, dh’ fhairich thu an suathadh. Bidh an rud a bu chòir a bhith na tharraing eireachdail, so-dhèanta airson a bhith a’ làimhseachadh dàta sreathach - a’ leughadh fhaidhlichean, a’ giullachd fhreagairtean HTTP, a’ cruth-atharrachadh stòran-dàta ann an àm fìor - gu tric a’ tiomnadh a-steach do chlàr-goileadair gnìomhair, semantics backpressure troimh-chèile, agus uachdar API a tha a’ faireachdainn nas coltaiche ri iomairt Java na JavaScript an latha an-diugh. Tha an còmhradh mu bhith a’ togail prìomhadail sruthadh nas fheàrr air a bhith a’ suirghe ann am molaidhean TC39, còmhraidhean frèam-obrach, agus pròiseactan stòr fosgailte airson bhliadhnaichean. Ann an 2026, tha e a’ ruighinn ìre tipping. Chan e a’ cheist a bheil API sruthan nas fheàrr comasach - is e cò ris a tha “nas fheàrr” coltach, agus dè a tha gar cumail air ais.

Far a bheil an API sruthan gnàthach a’ tuiteam goirid

B’ e fìor choileanadh innleadaireachd a bh’ ann an Inbhe Sruth WHATWG, a bheir cumhachd do ReadableStream, WritableStream, agus TransformStream thairis air brobhsairean agus amannan ruith leithid Node.js agus Deno. Thug e backpressure, cuir dheth, agus tionndadh async gu làimhseachadh dàta dùthchasach lìn. Ach ann an cleachdadh, tha an API ag iarraidh cus den leasaiche airson obrachaidhean cumanta. Gus sruth cruth-atharrachaidh sìmplidh a chruthachadh feumar TransformStream sa bhad le modh transform, a’ stiùireadh luchd-riaghlaidh, agus a’ làimhseachadh semantics sruthadh gu faiceallach - uile airson rud a tha a’ ciallachadh mapa() thairis air pìosan.

Dèan coimeas eadar seo agus mar a bhios luchd-leasachaidh ag obair le arrays. Tha Array.prototype.map(), filter(), agus reduce() furasta an leughadh, agus feumaidh iad seirbheis cha mhòr neoni. Chan eil an Streams API a’ tabhann gin den chomas ergonomic seo a-mach às a ’bhogsa. Bidh sruthan pìobaireachd còmhla tro .pipeThrough() ag obair, ach is e togail nan ìrean cruth-atharrachaidh fhèin far am bi luchd-leasachaidh a’ call uairean is foighidinn. Tha làimhseachadh mhearachdan thairis air slabhraidhean pìoba na adhbhar pian eile - cha bhith mearachdan a’ gluasad gu h-intuitive, agus bidh dì-bhugachadh loidhne-phìoban briste gu tric a’ ciallachadh cuir a-steach cruth-atharrachaidhean logaidh sealach dìreach gus faighinn a-mach càite a bheil dàta air a leigeil sìos no air a thruailleadh.

Tha an t-ailbhean Node.js san t-seòmar cuideachd. Tha a ghnìomhachd srutha dìleab fhèin aig Node (stream.Readable, stream.Writable), a tha faisg air deich bliadhna ro ìre WHATWG. Tha an dà shiostam eadar-obrachail a-mhàin tro ghoireasan adapter, agus tha mòran phasgan npm fhathast a’ cleachdadh an API as sine. Thathas a’ toirt air luchd-leasachaidh a tha ag obair thairis air àrainneachdan - toirt seachad taobh an fhrithealaiche, gnìomhan iomaill, giullachd stèidhichte air brabhsair - dà tharraing neo-fhreagarrach a cheangal airson an aon bhun-bheachd.

Cò ris a dh’ fhaodadh API Sruthan Nas Fheàrr a bhith coltach

Tha grunn mholaidhean agus dheuchainnean coimhearsnachd a’ comharrachadh àm ri teachd nas fhasa do luchd-leasachaidh. Tha na prìomh bheachdan a’ tighinn còmhla air grunn phrionnsapalan: comh-sgrìobhadh gnìomh, co-thaobhadh iterator async, agus plàta goileadair lùghdaichte. Smaoinich gu bheil e comasach dhut pìoban dàta sruthadh a sgrìobhadh cho nàdarrach ‘s a tha thu a’ sgrìobhadh cruth-atharraichean rèite - a’ slabhraidheadh .map(), .filter(), agus .take() gu dìreach air sruth a ghabhas leughadh gun fheum air nithean eadar-mheadhanach TransformStream a thogail.

Chan e beachd-bharail a tha seo. Tha am moladh Iterator Helpers (a-nis aig Ìre 4 ann an TC39) mu thràth a’ toirt .map(), .filter(), .take(), .drop(), agus .flatMap() gu iterators sioncronaich. 'S e ath cheum nàdarra a th' ann a bhith a' leudachadh a' phàtrain seo gu iterators async — agus le leudachadh, gu sruthan a ghabhas leughadh a nochdas [Symbol.asyncIterator]. Tha cuid de dh'amannan ruith agus leabharlannan air tòiseachadh a' feuchainn a-mach an dòigh-obrach seo mu thràth, a' leigeil le luchd-leasachaidh còd a sgrìobhadh mar:

Is e an tarraing sruthadh as cumhachdaiche fear a thèid à sealladh. Nuair as urrainn do luchd-leasachaidh cruth-atharrachaidhean dàta a chuir an cèill mar shreath de ghnìomhan sìmplidh - gun a bhith draghail mu luchd-riaghlaidh, ro-innleachdan ciudha, no backpressure làimhe - bidh iad a’ togail nas luaithe, a ’giùlan nas lugha de bhiteagan, agus is toil leotha a bhith ag obair le dàta sruthadh.

Chan e an t-amas an API Streams aig ìre ìosal a chur na àite gu tur. Bidh cùisean cleachdaidh an-còmhnaidh - protocolaidhean àbhaisteach, smachd cuimhne grinn, buileachadh codec dà-chànanach - far a bheil ruigsinneachd dìreach rianadair riatanach. Ach airson na 90% de chùisean cleachdaidh a tha a’ toirt a-steach leughadh, cruth-atharrachadh, agus sgrìobhadh dàta sreathach, bu chòir don ìre tarraing-às a bhith co-ionnan ri sìmplidheachd na h-obrach.

Leasan bho eag-shiostaman eile

Chan e JavaScript a’ chiad chànan anns am bu chòir dèiligeadh ri ergonomics sruthadh. Tha feartan Iterator agus Sruth aig Rust a’ tabhann tarraing a ghabhas dèanamh gun chosgais gun chosgais a leigeas le luchd-leasachaidh obrachadh slabhraidhean gun a bhith a’ riarachadh cruinneachaidhean eadar-mheadhanach. Tha modal Sruth Elixir a’ toirt seachad àireamhachd leisg le co-chòrdadh glan, càirdeil don phìob. Thug eadhon Java, a bha gu tric air a chàineadh airson briathrachais, a-steach java.util.stream.Stream ann an Java 8 le API fileanta a dh’ aithnicheadh luchd-leasachaidh JavaScript agus a dh’ aithnicheadh iad.

Is e na tha na h-eag-shiostaman sin a’ co-roinn gealltanas airson a’ chùis chumanta a dhèanamh beag. Bidh leughadh faidhle, sìoladh loidhnichean, agus sgrìobhadh thoraidhean a’ toirt 3-5 loidhnichean de chòd composable. Ann an Streams API gnàthach JavaScript, faodaidh an aon obrachadh leudachadh gu loidhnichean 20-30 gu furasta nuair a bheir thu cunntas air togail sruthan, làimhseachadh mhearachdan, agus lughdachadh ceart. Chan ann mu dheidhinn comas a tha a’ bheàrn - tha e mu dheidhinn ergonomics.

Tha dòigh-obrach Python feumail cuideachd. Tha gnìomhan gineadair le toradh a’ toirt seachad dòigh nàdarra air dàta sreathach a thoirt gu buil agus ithe gu leisg. Tha gnìomhan gineadair aig JavaScript cuideachd, ach le bhith gan ceangal gu Streams API feumar am pasgadh ann an luchd-togail ReadableStream le riaghladairean stèidhichte air tarraing. Chuireadh amalachadh nas teinne eadar gineadairean agus sruthan - far am faodadh gnìomh gineadair a bhith na shruth a ghabhas leughadh gu dìreach - cuir às do roinn iomlan de ghoileadair.

A’ Bhuaidh Dha-rìribh air Leasachadh Iarrtasan

Chan e dragh acadaimigeach a tha seo. Tha sruthadh dàta aig cridhe tagraidhean lìn an latha an-diugh. Tachartasan air an cur air falbh le frithealaiche, freagairtean HTTP cruinn, clàran anailis fìor-ùine, giullachd luchdachadh suas faidhle, sruthadh toraidh modail AI - is e feartan làitheil a tha seo, chan e cùisean iomaill. Nuair a tha an sruth prìomhadail duilich a chleachdadh, bidh luchd-leasachaidh an dàrna cuid ga sheachnadh (a’ gleidheadh ​​a h-uile càil gu cuimhne, nach eil a’ sgèile) no a’ togail pìoban lag, duilich a chumail suas a bhios nan adhbhar airson tachartasan cinneasachaidh.

Beachdaich air dè thachras aig sgèile. Bidh àrd-ùrlar mar Mewayz, a bhios a’ giullachd dàta thairis air 207 modal gnìomhachais amalaichte - bho phìoban CRM agus fàirdeal gu àireamhachadh pàighidh agus tracadh cabhlach - a’ làimhseachadh meud mòr de dhàta sreathach air an taobh a-staigh. Tha gnìomhachd às-mhalairt, gineadh aithisgean, giullachd tachartais webook, agus ùrachaidhean deas-bhòrd fìor-ùine uile a’ faighinn buannachd bho shruthadh èifeachdach. Nuair a bhios na prìomh phrionnsabalan cànain bunaiteach ga dhèanamh duilich sruthadh, bidh a’ chosgais ag iomadachadh thar gach modal agus gach sruth dàta. Aig a’ cheann thall bidh innleadairean àrd-ùrlair a’ togail tarraingean sruthadh a-staigh a bharrachd air tarraingean a’ chànain, a’ cur iom-fhillteachd ris nach bu chòir a bhith riatanach.

💡 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 →
  • Giullachd fhaidhlichean: Tha feum air sruthadh gus faidhlichean CSV a luchdachadh suas agus a pharsadh le sreathan 100K+ gus sgìths cuimhne a sheachnadh - ach tha an API gnàthach a’ dèanamh eadhon gnìomhair cruth-atharrachaidh bunaiteach sreath air sreath
  • Donn-bhùird fìor-ùine: Tha sruthadh dàta anailis bho fhrithealaiche gu neach-dèiligidh tro SSE no WebSocket a’ faighinn buannachd bho chruth-atharraichean a ghabhas dèanamh (co-chruinneachadh, sìoladh, smeòrach) a tha goirt a chur an cèill an-diugh
  • Sruthadh freagairt AI: Mar a bhios feartan cumhachd LLM a’ fàs àbhaisteach ann an innealan gnìomhachais, tha sruthadh fhreagairtean token-by-token don UI na phrìomh dùil - agus cùis cleachdaidh foirfe airson cruth-atharrachadh sruth slabhraidh
  • Obrachaidhean baidse: Tha a bhith a’ giullachd pàighidh nam mìltean de luchd-obrach, a’ gineadh mòr-fhàirdealan, no a’ sioncronadh chlàran CRM le siostaman taobh a-muigh uile a’ toirt a-steach sruthadh dàta tro ìrean dearbhaidh, cruth-atharrachaidh agus toraidh
  • Pìoban lìn: 'S e uallach obrach sruthadh a th' ann a bhith a' toirt a-steach, a' dearbhadh, a' seòladh agus a' làimhseachadh thachartasan a tha a' tighinn a-steach bho aonachadh treas-phàrtaidh

Na thathar a’ moladh dha-rìribh

Tha eag-shiostam JavaScript a’ gluasad air iomadh taobh. Tha am moladh TC39 Iterator Helpers air tighinn gu crìch mar-thà, a’ toirt sgrìobhadh gnìomh gu iterators sioncronaich. Bheireadh an leudachadh nàdarrach — Async Iterator Helpers - na h-aon .map(), .filter(), .reduce(), .take(), agus .flatMap() dòighean gus iterators a shioncronachadh, a bhios a’ cur an gnìomh sruthan a ghabhas leughadh le bhith a’ cleachdadh sruthan a ghabhas leughadh tro Bolaator. Bheireadh seo leis fhèin piseach mòr air eòlas an leasaiche airson na pàtrain sruthadh as cumanta.

Seach TC39, tha innleachdan ìre-ruith cuideachd a’ putadh na crìche. Tha Deno air feuchainn ri barrachd ghoireasan sruth ergonomic. Tha bogsa inneal sruthan lìn agus leabharlannan coimhearsnachd coltach ris a’ toirt seachad gnìomhan cuideachaidh a bhios a’ cuairteachadh pàirtean gnìomhair an API. Agus tha gluasad a’ sìor fhàs air cùl a’ bheachd air leabharlann àbhaisteach sruth-dùthchasach - seata de ghoireasan togte, làn-leasaichte airson gnìomhachd sruthadh cumanta leithid sgoltadh loidhne, parsadh JSON, giullachd CSV, agus teannachadh a bhios luchd-leasachaidh a’ tarraing an-dràsta bho npm.

Tha argamaid làidir ann cuideachd airson semantics mearachd nas fheàrr. Ann an API an latha an-diugh, faodaidh mearachd ann an slabhraidh pìoba sruthan fhàgail ann an stàitean teagmhach - air an caitheamh gu ìre, le glasan crochte air luchd-leughaidh. Dh’ fhaodadh API ath-sgrùdaichte gabhail ri iomadachadh mearachd structaraichte coltach ris an t-seòrsa Result aig Rust no gabhail ri co-chruinneachadh far am bi mearachdan a’ sruthadh tron ​​​​loidhne-phìoban mar luachan, a’ leigeil le ìrean sìos an abhainn làimhseachadh no faighinn seachad orra gun a bhith a’ briseadh an t-sèine gu lèir. Bhiodh seo na chruth-atharrachail airson earbsachd toraidh.

Carson a tha seo nas cudromaiche na bha e a-riamh ann an 2026

Tha trì gluasadan co-aonaichte a’ fàgail ergonomics API sruthadh nas èiginn a-nis na bha iad aig àm sam bith ann an eachdraidh JavaScript. An toiseach, coimpiutaireachd iomaill - Luchd-obrach Cloudflare, Gnìomhan Vercel Edge, Deno Deploy - ag obair fo chuingealachaidhean teann cuimhne agus CPU far nach eil buffering freagairtean slàn no dàta ion-dhèanta. 'S e sruthadh an aon roghainn, agus feumaidh luchd-leasachaidh a bhios a' cleachdadh dha na h-àrainneachdan sin API nach bi a' sabaid riutha.

San dàrna h-àite, tha amalachadh AI air sruthadh a dhèanamh na fheart mu choinneamh luchd-cleachdaidh. Nuair a ghineas neach-cuideachaidh AI freagairt, bidh luchd-cleachdaidh an dùil gum faic comharran a’ nochdadh ann an àm fìor, gun a bhith a’ feitheamh ris an fhreagairt iomlan gu bufair. Feumaidh a h-uile àrd-ùrlar SaaS - bho shiostaman obrachaidh gnìomhachais leithid Mewayz gu innealan AI leotha fhèin - a-nis caitheamh sruth làidir taobh teachdaiche. Bidh an API gnàthach ag obair airson seo, ach dh’ fhaodadh eòlas an leasaiche air parsadh, cruth-atharrachadh, agus toirt seachad toradh AI sruthach a bhith gu math nas fheàrr le gnìomhaichean sruthan a ghabhas dèanamh.

San treas àite, tha an gluasad Jackscript làn-chruach a’ ciallachadh gu bheil luchd-leasachaidh a’ làimhseachadh sruthan air gach taobh de chrìoch an lìonraidh. Is dòcha gum bi aon innleadair a ’sgrìobhadh sruth taobh an fhrithealaiche a bhios a’ pròiseasadh toraidhean ceist stòr-dàta, gan pìobadh tro chruth-atharrachadh, gan cur mar fhreagairt HTTP cruinn, agus an uairsin ag ithe an aon shruth sin air an neach-dèiligidh gus UI adhartach a thoirt seachad. Nuair a tha an API sruthadh neònach, thathas a’ faireachdainn an suathadh sin aig gach ìre den chruaich.

A’ gluasad air adhart: Dè as urrainn do luchd-leasachaidh a dhèanamh an-diugh

Fhad 's a dh'fhàsas an cànan, chan eil luchd-leasachaidh a' feitheamh. Faodaidh grunn ro-innleachdan practaigeach an eòlas sruthadh ann am pròiseactan gnàthach a leasachadh. Le bhith a’ cleachdadh gineadairean async mar am prìomh phàtran ùghdarrachaidh - agus gan pasgadh ann an ReadableStream.from() far a bheil an ùine ruith a’ toirt taic dha - a’ toirt seachad co-chòrdadh tòrr nas glaine na riaghladh rianadair làimhe. Bidh leabharlannan mar it-pipe agus streaming-iterables a’ tabhann luchd-cuideachaidh so-dhèanta a bheir slabhraidh gnìomh gu iterators asyncronach an-diugh.

Do sgiobaidhean a bhios a’ togail thagraidhean a tha dian air dàta, bidh tasgadh ann an sreath tana de ghoireas sruthadh a-staigh a’ pàigheadh earrannan. Tha seata ghnìomhan streamMap() air a dheagh dhealbhadh, streamFilter(), agus streamBatch() - gach fear a’ gabhail async iteable agus a’ tilleadh async iterable - a’ toirt seachad cho furasta ‘s a tha an API àbhaisteach, às aonais cuideam frèam làn sruthadh. Is e seo am pàtran a tha a’ dol bho phrototeipean tòiseachaidh gu àrd-ùrlaran a’ làimhseachadh milleanan de ghnìomhachd.

  1. Gabh gineadairean async mar am pàtran bunaiteach agad airson dàta sruthadh a thoirt gu buil - tha iad nas glaine, nas deuchainniche agus nas com-pàirteach na togail le làimh ReadableStream
  2. Cleachd ReadableStream.from() gus itealan sioncronaich a dhùnadh a-steach do shaoghal sruthan lìn nuair a bhios feum agad air eadar-obrachadh le APIan a tha an dùil ri suidheachaidhean ReadableStream
  3. Tog no gabh ri gnìomhan goireasach tana airson obrachaidhean cumanta (mapa, criathrag, baidse, smeòrach) thairis air rudan a ghabhas a shioncronachadh seach a bhith a’ togail nithean TransformStream
  4. Neach-tagraidh ann an TC39 agus còmhraidhean runtime - feumaidh am moladh neach-cuideachaidh async iterator guthan leasaiche a’ putadh airson prìomhachasadh
  5. Sgrìobh deuchainnean mu choinneamh rudan async iterables, chan e sruthan gu dìreach - nì seo an loidsig sruthadh agad so-ghiùlain agus nas fhasa a dhearbhadh

Bha an JavaScript Streams API na bhunait riatanach. Ach thathar an dùil togail air bunaitean, agus tha an ath shreath de tharraing - fear a tha a’ dèanamh sruthadh cho nàdarra ri bhith ag obair le arrays - fadalach. Tha na pìosan nan àite: iterators async, gnìomhan gineadair, agus pàtran luchd-cuideachaidh iterator. Is e an rud a tha a dhìth a-nis an toil choitcheann airson an cruinneachadh ann an inbhe a tha a rèir mar a bhios luchd-leasachaidh a’ smaoineachadh air dàta sreath. Chan e dìreach API nas fheàrr a bhios mar thoradh - fosglaidh e sruthadh mar phàtran bunaiteach seach mar an roghainn mu dheireadh, a’ dèanamh thagraidhean nas luaithe, nas èifeachdaiche le cuimhne, agus nas tlachdmhoire a thogail.

Ceistean Bitheanta

Dè tha ceàrr air an API JavaScript Streams a tha ann an-dràsta?

Tha an Streams API gnàthach a’ fulang le cus boilerplate, semantics backpressure troimh-chèile, agus uachdar API a tha ro iom-fhillte a tha a’ dì-mhisneachadh uchd-mhacachd. Feumaidh gnìomhan sìmplidh leithid leughadh faidhle no giollachd freagairt HTTP fada a bharrachd còd na tha riatanach. Bidh luchd-leasachaidh gu tric a’ cleachdadh leabharlannan treas-phàrtaidh no pàtrain nas sine leithid fios air ais agus luchd-sgaoilidh thachartasan, a’ dol seachad air an ìre gu tur leis gu bheil an ergonomics a’ faireachdainn nas fhaisge air iomairt Java na JavaScript an latha an-diugh.

Ciamar a leasaicheadh API Streams nas fheàrr leasachadh lìn?

Dhèanadh API Streams ath-dhealbhaichte le co-chòrdadh nas glaine, taic ath-aithris async stèidhichte, agus dòighean sgrìobhaidh intuitive gu mòr a dhèanamh nas sìmplidhe air giollachd dàta fìor-ùine. Dh’ fhaodadh luchd-leasachaidh cruth-atharrachaidhean a shìneadh gu nàdarra, làimhseachadh backpressure gu follaiseach, agus pìoban sruthadh a sgrìobhadh ann am bloigh den chòd. Dhèanadh seo tairgse adhartach, biadhan dàta beò, agus giullachd fhaidhlichean mòra ruigsinneach don h-uile leasaiche JavaScript, chan e dìreach an fheadhainn a tha deònach a bhith a’ carachd le prìomhairean aig ìre ìosal.

An urrainn dha àrd-ùrlaran gnìomhachais an latha an-diugh sruthadh dàta fìor-ùine a làimhseachadh gu h-èifeachdach?

Tha - tha àrd-ùrlaran mar Mewayz, OS gnìomhachais 207-modal a’ tòiseachadh aig $19/mo, mu thràth a’ luathachadh pìoban dàta èifeachdach air cùl na seallaidhean airson anailisean, sruthan obrach fèin-ghluasaid, agus aithris beò. Mar a bhios ìrean sruthadh a’ dol am feabhas ann an JavaScript, lìbhrigidh innealan a chaidh a thogail air a’ chruach lìn eòlasan fìor-ùine eadhon nas luaithe, bho ùrachaidhean deas-bhòrd sa bhad gu giollachd fhaidhlichean fuaigheil thairis air modalan gnìomhachais aonaichte.

Dè na roghainnean eile a tha ann fhad ‘s a bhios an Streams API a’ fàs?

Tha luchd-leasachaidh an-dràsta an urra ri leabharlannan leithid sruthan Node.js, RxJS airson prògramadh ath-ghnìomhach, no gineadairean async air am pacadh le lùban feitheamh gus dàta sreathach a làimhseachadh ann an dòigh nas ergonomic. Bidh polyfills a tha co-chosmhail ris an lìon agus luchd-cuideachaidh ìre molaidh cuideachd a’ drochaid beàrnan san API àbhaisteach. Is e an iuchair a bhith a’ taghadh geàrr-chunntasan a tha a rèir do chùis cleachdaidh - ge bith a bheil sin a’ ciallachadh pàtrain faicsinneach airson tagraidhean a tha trom le tachartas no tionndadh sìmplidh async airson gnìomhan cruth-atharrachaidh dàta sìmplidh.