Hacker News

Бољи стримови АПИ је могућ за ЈаваСцрипт

Коментари

1 min read Via blog.cloudflare.com

Mewayz Team

Editorial Team

Hacker News
<х2>ЈаваСцрипт-ов Стреамс АПИ има проблем — и програмери коначно говоре о томе <п>Ако сте икада покушали да користите <стронг>Стреамс АПИ у ЈаваСцрипт-у за било шта осим примера из уџбеника, осетили сте трење. Оно што би требало да буде елегантна апстракција која се може саставити за руковање секвенцијалним подацима – читање датотека, обрада ХТТП одговора, трансформисање скупова података у реалном времену – често се претвара у опширни шаблон, збуњујућу семантику повратног притиска и АПИ површину која више личи на Јава Јава него модерни ЈаваСцрипт. Разговор око изградње бољег примитивног стримовања већ годинама тиња у предлозима ТЦ39, дискусијама о оквирима и пројектима отвореног кода. 2026. достиже прекретницу. Питање није да ли је бољи АПИ за стримове могућ – већ како „боље“ заправо изгледа и шта нас спутава. <х2>Где тренутни Стреамс АПИ пада <п>ВХАТВГ Стреамс Стандард, који покреће <стронг>РеадаблеСтреам, <стронг>ВритаблеСтреам и <стронг>ТрансформСтреам у прегледачима и временима извршавања као што су Ноде.јс и Дено, био је право инжењерско достигнуће. То је донело повратни притисак, отказивање и асинхронизовану итерацију у руковање подацима на вебу. Али у пракси, АПИ тражи превише од програмера за уобичајене операције. Креирање једноставног тока трансформације захтева инстанцирање <цоде>ТрансформСтреам методом <цоде>трансформ, управљање контролерима и пажљиво руковање семантиком испирања – све за оно што представља <цоде>мап() преко делова. <п>Упоредите ово са начином на који програмери раде са низовима. <цоде>Арраи.прототипе.мап(), <цоде>филтер() и <цоде>редуце() се могу саставити, читљиви и захтевају скоро нулту церемонију. Стреамс АПИ не нуди ништа од ове ергономске могућности састављања ван кутије. Спајање токова преко <цоде>.пипеТхроугх() функционише, али изградња самих фаза трансформације је место где програмери губе сате и стрпљење. Руковање грешкама у цевоводним ланцима је још једна болна тачка — грешке се не шире интуитивно, а отклањање грешака у поквареном цевоводу често значи уметање привремених трансформација евиденције само да би се открило где се подаци испуштају или оштећују. <п>У соби је и слон Ноде.јс. Ноде има сопствену застарелу имплементацију тока (<цоде>стреам.Реадабле, <цоде>стреам.Вритабле), која је претходила стандарду ВХАТВГ скоро једну деценију. Ова два система су интероперабилна само преко услужних програма адаптера, а многи нпм пакети и даље користе старији АПИ. Програмери који раде у различитим окружењима — приказивање на страни сервера, функције ивице, обрада заснована на прегледачу — приморани су да жонглирају са две некомпатибилне апстракције за исти концепт. <х2>Како би могао да изгледа бољи Стреамс АПИ <п>Неколико предлога и експеримената заједнице указује на будућност прилагођенију програмерима. Основне идеје настављају да конвергирају на неколико принципа: <стронг>функционална композиција, <стронг>асинхронизовано поравнање итератора и <стронг>смањени шаблон. Замислите да можете да пишете цевоводе података за стримовање једнако природно као што пишете трансформације низа — уланчавање <цоде>.мап(), <цоде>.филтер() и <цоде>.таке() директно у читљив ток без потребе за конструисањем средњих ТрансформСтреам објеката. <п>Ово није хипотетичко. Предлог <стронг>Итератор Хелперс (сада у фази 4 у ТЦ39) већ доноси <цоде>.мап(), <цоде>.филтер(), <цоде>.таке(), <цоде>.дроп() и <цоде>.флатМап() у синхронизатор. Проширивање овог обрасца на асинхронизоване итераторе — а тиме и на читљиве токове који откривају <цоде>[Симбол.асинцИтератор] — је природан следећи корак. Неке рунтимес и библиотеке су већ почеле да експериментишу са овим приступом, дозвољавајући програмерима да пишу код као што је: <блоцккуоте>Најмоћнија апстракција стриминга је она која нестаје. Када програмери могу да изразе трансформације података као ланац једноставних функција — без бриге о контролерима, стратегијама чекања у реду или ручном повратном притиску — они брже граде, испоручују мање грешака и заправо уживају у раду са стримовањем података.<п>Циљ није да се у потпуности замени Стреамс АПИ ниског нивоа. Увек ће постојати случајеви употребе — прилагођени протоколи, фино зрнаста контрола меморије, имплементације бинарног кодека — где је директан приступ контролеру неопходан. Али за <стронг>90% случајева употребе који укључују читање, трансформацију и писање секвенцијалних података, слој апстракције треба да одговара једноставности задатка. <х2>Лекције из других екосистема <п>ЈаваСцрипт није први језик који се бори са ергономијом за стримовање. Рустове особине <стронг>Итератор и <стронг>Стреам нуде апстракцију са нултом ценом која се може саставити и која омогућава програмерима да уланчају операције без додељивања међуколекција. Еликир-ов <стронг>Стреам модул обезбеђује лењо набрајање са чистом синтаксом прилагођеном цевима. Чак је и Јава, која је често критикована због опширности, увела <цоде>јава.утил.стреам.Стреам у Јаву 8 са течним АПИ-јем који би ЈаваСцрипт програмери препознали и завидели. <п>Ово што ови екосистеми деле је посвећеност да <стронг>уобичајени случај буде тривијалан. За читање датотеке, филтрирање линија и писање резултата потребно је 3-5 редова кода који се може саставити. У ЈаваСцрипт-овом тренутном Стреамс АПИ-ју, иста операција се лако може проширити на 20-30 редова када узмете у обзир конструкцију тока, руковање грешкама и правилно уклањање. Разлика није у могућности – већ у ергономији. <п>Питхонов приступ је такође поучан. Генераторске функције са <цоде>ииелд обезбеђују природан начин за лењо производњу и потрошњу секвенцијалних података. ЈаваСцрипт такође има функције генератора, али њихово премошћивање са Стреамс АПИ-јем захтева њихово умотавање у <цоде>РеадаблеСтреам конструкторе са контролерима заснованим на повлачењу. Чвршћа интеграција између генератора и токова — где би функција генератора могла директно да постане читљив ток — елиминисала би читаву категорију шаблона. <х2>Утицај у стварном свету на развој апликација <п>Ово није академска брига. Стримовање података је у срцу модерних веб апликација. Догађаји које шаље сервер, подељени ХТТП одговори, контролне табле за анализу у реалном времену, обрада отпремања датотека, стриминг излазног модела АИ модела — ово су свакодневне функције, а не ивични случајеви. Када је примитив за стримовање тешко користити, програмери га или избегавају у потпуности (баферују све у меморију, која се не повећава) или граде крхке, тешко одржаване цевоводе који постају извор инцидената у производњи. <п>Размотрите шта се дешава у великој мери. Платформа као што је <стронг>Меваиз, која обрађује податке у 207 интегрисаних пословних модула — од ЦРМ цевовода и фактурисања до обрачуна платног списка и праћења возног парка — интерно рукује огромним количинама секвенцијалних података. Операције извоза, генерисање извештаја, обрада догађаја веб-хука и ажурирања контролне табле у реалном времену имају користи од ефикасног стримовања. Када основни језички примитиви отежавају стриминг, цена се множи у сваком модулу и сваком току података. Инжењери платформе на крају граде интерне апстракције за стримовање на апстракцијама језика, додајући сложеност која не би требало да буде неопходна. <ул> <ли><стронг>Обрада датотека: Отпремање и рашчлањивање ЦСВ датотека са више од 100.000 редова захтева стримовање да би се избегло исцрпљивање меморије — али тренутни АПИ чини чак и основну трансформацију ред по ред опширном <ли><стронг>Контролне табле у реалном времену: Стримовање аналитичких података са сервера на клијента преко ССЕ-а или ВебСоцкет-а има користи од састављајућих трансформација (агрегација, филтрирање, пригушивање) које је данас тешко изразити <ли><стронг>Стримовање АИ одговора: Како функције засноване на ЛЛМ-у постају стандардне у пословним алатима, стриминг одговора токен-би-токен на корисничко сучеље је основно очекивање — и савршен случај употребе за ланчане трансформације токова <ли><стронг>Групне операције: Обрада платног списка за хиљаде запослених, генерисање фактура на велико или синхронизација ЦРМ записа са спољним системима, све то укључује стримовање података кроз фазе валидације, трансформације и излаза <ли><стронг>Вебхоок пипелинес: Уношење, провера, рутирање и обрада долазних вебхоок догађаја из интеграција независних произвођача је инхерентно оптерећење за стримовање <х2>Шта се заправо предлаже<п>Екосистем ЈаваСцрипта се креће на више фронтова. Предлог ТЦ39 <стронг>Итератор Хелперс је већ стигао, доносећи функционалну композицију синхроним итераторима. Природна екстензија — <стронг>Асинц Итератор Хелперс — би донела исте методе <цоде>.мап(), <цоде>.филтер(), <цоде>.редуце(), <цоде>.таке() и <цоде>.флатМап() које имплементирају асинхронизоване итераторе који већ примењују итераторе за читање, <цоде>[Симбол.асинцИтератор]. Само ово би драматично побољшало искуство програмера за најчешће обрасце стримовања. <п>Изван ТЦ39, иновације на нивоу времена рада такође померају границе. Дено је експериментисао са ергономичнијим услужним програмима. <стронг>Пакет са алаткама за веб стримове и сличне библиотеке заједнице пружају помоћне функције које обухватају детаљне делове АПИ-ја. И постоји све већи замах иза идеје о <стронг>нативној стандардној библиотеци стриминга — скупу уграђених, оптимизованих услужних програма за уобичајене операције стримовања као што су подела линија, ЈСОН рашчлањивање, ЦСВ обрада и компресија које програмери тренутно извлаче из нпм-а. <п>Постоји и убедљив аргумент за <стронг>бољу семантику грешака. У данашњем АПИ-ју, грешка у цевоводном ланцу може оставити токове у двосмисленим стањима — делимично потрошеним, са висећим бравама на читачима. Ревидирани АПИ би могао усвојити структурирано ширење грешака слично Рустовом типу <цоде>Резултат или усвојити конвенцију где грешке теку кроз цевовод као вредности, омогућавајући низводним фазама да рукују или се опораве од њих без прекида целог ланца. Ово би било трансформативно за поузданост производње. <х2>Зашто је ово важније више него икад у 2026. <п>Три конвергентна тренда чине ергономију АПИ-ја за стримовање сада хитнијом него у било ком тренутку у историји ЈаваСцрипт-а. Прво, <стронг>ивично рачунарство — Цлоудфларе Воркерс, Верцел Едге Фунцтионс, Дено Деплои — функционише под строгим ограничењима меморије и ЦПУ-а где баферовање читавих одговора или скупова података једноставно није изводљиво. Стримовање је једина опција, а програмерима који се примењују у овим окружењима потребан је АПИ који се не бори против њих. <п>Друго, <стронг>интеграција АИ је учинила стримовање функцијом која је окренута корисницима. Када помоћник вештачке интелигенције генерише одговор, корисници очекују да се токени појављују у реалном времену, а не да чекају цео одговор на бафер. Свака СааС платформа — од пословних оперативних система као што је Меваиз до самосталних АИ алата — сада треба робусну потрошњу токова на страни клијента. Тренутни АПИ ради за ово, али искуство програмера у рашчлањивању, трансформацији и рендеровању стримованог АИ излаза може бити знатно боље са композитним операторима стримова. <п>Треће, покрет <стронг>пуног стека значи да програмери рукују стримовима са обе стране границе мреже. Један инжењер би могао да напише ток на страни сервера који обрађује резултате упита базе података, преноси их кроз трансформацију, шаље их као ХТТП одговор у комадима, а затим користи тај исти ток на клијенту да би приказао прогресивни кориснички интерфејс. Када је АПИ за стриминг незгодан, то трење се осећа на сваком слоју стека. <х2>Напредак: Шта програмери могу да ураде данас <п>Док се језик развија, програмери не чекају. Неколико практичних стратегија може побољшати искуство стриминга у тренутним пројектима. Коришћење <стронг>асинх генератора као примарног обрасца за креирање – и њихово умотавање у <цоде>РеадаблеСтреам.фром() где време извршавања то подржава – обезбеђује много чистију синтаксу од ручног управљања контролером. Библиотеке као што су <стронг>ит-пипе и <стронг>стреаминг-итераблес нуде помоћнике који се могу саставити који данас доносе функционално уланчавање асинхронизованим итераторима. <п>За тимове који праве апликације које захтевају велику количину података, улагање у танак интерни услужни слој за стриминг исплати се. Добро дизајниран скуп функција <цоде>стреамМап(), <цоде>стреамФилтер() и <цоде>стреамБатцх() — свака узима асинхронизовани итерабле и враћа асинхронизовани итерабле — обезбеђује могућност састављања која недостаје стандардном АПИ-ју, без тежине пуног оквира за стриминг. Ово је образац који се креће од прототипова покретања до платформи које рукују милионима операција.<ол> <ли><стронг>Усвојите асинхронизоване генераторе као подразумевани образац за производњу стримованих података – они су чишћи, пробљивији и компонованији од ручне конструкције РеадаблеСтреам-а <ли><стронг>Користите <цоде>РеадаблеСтреам.фром() да повежете асинхронизоване итерабле у свет веб стримова када вам је потребна интеракција са АПИ-јима који очекују РеадаблеСтреам инстанце <ли><стронг>Изградите или усвојите танке услужне функције за уобичајене операције (мапа, филтер, серија, гас) преко асинхронизованих итераблеа уместо конструисања објеката ТрансформСтреам <ли><стронг>Заступник у дискусијама о ТЦ39 и рунтиме — предлог асинхронизованих помоћника итератора захтева гласове програмера који инсистирају на одређивању приоритета <ли><стронг>Пишите тестове за асинхронизоване итерабле, а не директно за стримовање – ово чини вашу логику стриминга преносивом и лакшом за проверу <п>АПИ за ЈаваСцрипт стримове је био неопходна основа. Али темељи треба да се граде, а следећи слој апстракције – онај који стримовање чини природним као и рад са низовима – је закаснио. Комади су на месту: асинхронизовани итератори, функције генератора и образац помоћника итератора. Оно што је сада потребно је колективна воља да се они саставе у стандард који одговара начину на који програмери заправо размишљају о секвенцијалним подацима. Резултат неће бити само бољи АПИ – он ће откључати стриминг као подразумевани образац, а не као последње средство, чинећи апликације бржим, ефикаснијим за меморију и пријатнијим за прављење. <х2>Честа питања <х3>Шта није у реду са тренутним ЈаваСцрипт Стреамс АПИ-јем? <п>Актуелни Стреамс АПИ пати од претераног стандарда, збуњујуће семантике повратног притиска и превише сложене АПИ површине која обесхрабрује усвајање. Једноставни задаци попут читања датотеке или обраде ХТТП одговора захтевају много више кода него што је потребно. Програмери често прибегавају библиотекама независних произвођача или старијим обрасцима као што су повратни позиви и емитери догађаја, заобилазећи стандард у потпуности зато што је ергономија ближа Јави за предузећа него модерном ЈаваСцрипт-у. <х3>Како би бољи Стреамс АПИ побољшао развој веба? <п>Редизајнирани Стреамс АПИ са јаснијом синтаксом, уграђеном подршком за асинхронизацију и интуитивним методама композиције драматично би поједноставио обраду података у реалном времену. Програмери би могли природно да уланчају трансформације, транспарентно управљају повратним притиском и пишу цевоводе за стриминг у делу кода. Ово би учинило прогресивно приказивање, ливе фидове података и обраду великих датотека доступним сваком ЈаваСцрипт програмеру, а не само онима који су спремни да се боре са примитивима ниског нивоа. <х3>Могу ли модерне пословне платформе ефикасно управљати стримовањем података у реалном времену? <п>Да — платформе као што је <а хреф="хттпс://апп.меваиз.цом">Меваиз, пословни ОС са 207 модула по цени од 19 УСД месечно, већ користе ефикасне цевоводе података иза кулиса за аналитику, аутоматизацију радних токова и извештавање уживо. Како се стандарди стриминга побољшавају у ЈаваСцрипт-у, алатке изграђене на веб стеку ће пружити још брже искуство у реалном времену, од тренутних ажурирања контролне табле до беспрекорне обраде датотека кроз интегрисане пословне модуле. <х3>Које алтернативе постоје док се Стреамс АПИ развија? <п>Програмери се тренутно ослањају на библиотеке као што су Ноде.јс стримови, РкЈС за реактивно програмирање или асинхронизовани генератори упарени са петљама за чекање за ергономскије руковање секвенцијалним подацима. Полифили компатибилни са Вебом и помоћници у фази предлога такође премошћују празнине у стандардном АПИ-ју. Кључ је у одабиру апстракција које су у складу са вашим случајем употребе — било да то значи уочљиве обрасце за апликације са великим бројем догађаја или једноставну асинхронизацију за једноставне задатке трансформације података.<сцрипт типе="апплицатион/лд+јсон">{"@цонтект":"хттпс:\/\/сцхема.орг","@типе":"ФАКПаге","маинЕнтити":[{"@типе":"Куестион","наме":"Шта није у реду са тренутним ЈаваСцрипт Стреамс АПИ-јем?","аццептедАнсвер":"СтреетТхес":{"Ансвер":{"Анс" пати од претераног шаблона, збуњујуће семантике и превише сложене површине АПИ-ја која обесхрабрује усвајање једноставних задатака као што је читање датотеке или обрада ХТТП одговора. Програмери често прибегавају библиотекама трећих страна или старијим обрасцима као што су повратни позиви и емитери догађаја, заобилазећи у потпуности стандард"}}Х":" да ли би бољи Стреамс АПИ побољшао развој веба?","аццептедАнсвер":{"@типе":"Ансвер","тект":"Редизајнирани Стреамс АПИ са јаснијом синтаксом, уграђеном подршком за асинхронизацију и интуитивним методама композиције би драматично поједноставили обраду података у реалном времену, а програмери би могли да напишу ланац трансформације у ланцу цевовода правите прогресивно приказивање, пренос података уживо и приступ обради великих датотека"}},{"@типе":"Куестион","наме":"Могу ли модерне пословне платформе ефикасно да руководе стримингом података у реалном времену?","аццептедАнсвер":{"@типе":"Одговор","тект":"Да \у2014 платформе као што је Меваиз-1мо већ почиње посао од $207/мо пословања искористите ефикасне цевоводе података иза кулиса за аналитику, аутоматизацију радних токова и извештавање уживо Како се стандарди за стриминг побољшавају у ЈаваСцрипт-у, алатке изграђене на веб стеку ће пружити још брже искуство у реалном времену, од тренутних ажурирања контролне табле до беспрекорне обраде датотека у интегрисаном пословању"}},{"@типе":"Куестион","наме":"Вхат АПИс":"Вхат АПИ" еволуира?","аццептедАнсвер":{"@типе":"Ансвер","тект":"Програмери се тренутно ослањају на библиотеке као што су токови Ноде.јс, РкЈС за реактивно програмирање или асинхронизовани генератори упарени са фор-аваит-оф петљама за руковање секвенцијалним подацима који су ергономичнији и премошћавају га АПИ Кључ је у одабиру апстракција које су у складу са вашим случајем употребе \у2014 да ли то значи да су видљиви обрасци за тешке догађаје"}}]}.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

POS & Payments Guide →

Accept payments anywhere: POS terminals, online checkout, multi-currency, and real-time inventory sync.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime