Hacker News

API streams ທີ່ດີກວ່າແມ່ນເປັນໄປໄດ້ສໍາລັບ JavaScript

ຄຳເຫັນ

3 min read Via blog.cloudflare.com

Mewayz Team

Editorial Team

Hacker News

API Stream ຂອງ JavaScript ມີບັນຫາ — ແລະຜູ້ພັດທະນາກຳລັງເວົ້າເຖິງມັນໃນທີ່ສຸດ

ຖ້າທ່ານເຄີຍພະຍາຍາມໃຊ້ Streams API ໃນ JavaScript ສໍາລັບສິ່ງໃດທີ່ນອກເໜືອໄປຈາກຕົວຢ່າງຂອງປຶ້ມແບບຮຽນ, ທ່ານຮູ້ສຶກວ່າມີຂໍ້ຂັດແຍ່ງ. ສິ່ງທີ່ຄວນຈະເປັນ abstraction ທີ່ສະຫງ່າງາມ, ສາມາດປະກອບໄດ້ສໍາລັບການຈັດການຂໍ້ມູນຕາມລໍາດັບ - ການອ່ານໄຟລ໌, ການປະມວນຜົນການຕອບ HTTP, ການຫັນປ່ຽນຊຸດຂໍ້ມູນໃນເວລາຈິງ - ມັກຈະພັດທະນາເຂົ້າໄປໃນ boilerplate verbose, ສັບສົນທາງ backpressure semantics, ແລະຫນ້າ API ທີ່ມີຄວາມຮູ້ສຶກຄືກັບ Java ວິສາຫະກິດຫຼາຍກ່ວາ JavaScript ທີ່ທັນສະໄຫມ. ການສົນທະນາກ່ຽວກັບການສ້າງ streaming primitive ທີ່ດີກວ່າໄດ້ຖືກ simmering ໃນການສະເຫນີ TC39, ການສົນທະນາກອບ, ແລະໂຄງການ open-source ສໍາລັບປີ. ໃນປີ 2026, ມັນຮອດຈຸດສູງສຸດ. ຄຳຖາມບໍ່ແມ່ນວ່າ API streams ທີ່ດີກວ່າຈະເປັນໄປໄດ້ຫຼືບໍ່ — ມັນຄືສິ່ງທີ່ "ດີກວ່າ" ແທ້ໆ, ແລະສິ່ງທີ່ເຮັດໃຫ້ພວກເຮົາກັບມາຢູ່.

ບ່ອນທີ່ API Streams ປະຈຸບັນຫຼຸດລົງ

ມາດຕະຖານ WHATWG Stream, ເຊິ່ງໃຫ້ອຳນາດ ReadableStream, WritableStream, ແລະ TransformStream ໃນທົ່ວບຼາວເຊີ ແລະ runtimes ເຊັ່ນ Node.js ແລະ Deno, ເປັນຄວາມສຳເລັດດ້ານວິສະວະກຳແທ້ໆ. ມັນໄດ້ນໍາເອົາຄວາມກົດດັນ, ການຍົກເລີກ, ແລະ async iteration ໃຫ້ກັບການຈັດການຂໍ້ມູນເວັບ. ແຕ່ໃນທາງປະຕິບັດ, API ຂໍໃຫ້ນັກພັດທະນາຫຼາຍເກີນໄປສໍາລັບການປະຕິບັດງານທົ່ວໄປ. ການສ້າງກະແສການຫັນປ່ຽນແບບງ່າຍດາຍຮຽກຮ້ອງໃຫ້ມີ TransformStream ທັນທີດ້ວຍວິທີການ transform, ການຈັດການຕົວຄວບຄຸມ, ແລະການຈັດການ flush semantics ຢ່າງລະມັດລະວັງ — ທັງໝົດແມ່ນສໍາລັບ map() ຫຼາຍກວ່າ chunks.

ປຽບທຽບອັນນີ້ກັບວິທີທີ່ນັກພັດທະນາເຮັດວຽກກັບ arrays. Array.prototype.map(), filter(), ແລະ reduce() ແມ່ນປະກອບໄດ້, ສາມາດອ່ານໄດ້, ແລະຕ້ອງການພິທີເກືອບສູນ. Stream API ສະໜອງການປະກອບ ergonomic ນີ້ອອກຈາກກ່ອງ. ທໍ່ນ້ໍາຮ່ວມກັນຜ່ານ .pipeThrough() ເຮັດວຽກ, ແຕ່ການສ້າງຂັ້ນຕອນການຫັນປ່ຽນດ້ວຍຕົນເອງແມ່ນບ່ອນທີ່ນັກພັດທະນາສູນເສຍຊົ່ວໂມງແລະຄວາມອົດທົນ. ຄວາມຜິດພາດໃນການຈັດການຕ່ອງໂສ້ທໍ່ເປັນຈຸດເຈັບປວດອີກອັນໜຶ່ງ — ຄວາມຜິດພາດບໍ່ໄດ້ແຜ່ລາມໄປດ້ວຍສະຕິປັນຍາ, ແລະການດີບັກສາຍທໍ່ທີ່ແຕກຫັກນັ້ນມັກຈະໝາຍເຖິງການໃສ່ການຕັດໄມ້ຊົ່ວຄາວເພື່ອປ່ຽນໄປເບິ່ງບ່ອນທີ່ຂໍ້ມູນຖືກຖິ້ມ ຫຼືເສຍຫາຍ.

ມີຊ້າງ Node.js ຢູ່ໃນຫ້ອງ. Node ມີການປະຕິບັດການຖ່າຍທອດແບບເກົ່າຂອງຕົນເອງ (stream.Readable, stream.Writable), ເຊິ່ງໃຊ້ມາດຕະຖານ WHATWG ເກືອບໜຶ່ງທົດສະວັດ. ທັງສອງລະບົບສາມາດເຮັດວຽກຮ່ວມກັນໄດ້ຜ່ານອະແດັບເຕີ utilities ເທົ່ານັ້ນ, ແລະຫຼາຍແພັກເກັດ npm ຍັງໃຊ້ API ເກົ່າ. ຜູ້ພັດທະນາທີ່ເຮັດວຽກໃນທົ່ວສະພາບແວດລ້ອມ — ການສະແດງຜົນຂ້າງເຊີບເວີ, ຟັງຊັນຂອບ, ການປະມວນຜົນຕາມຕົວທ່ອງເວັບ — ໄດ້ຖືກບັງຄັບໃຫ້ juggle ສອງ abstractions ທີ່ບໍ່ເຂົ້າກັນໄດ້ສໍາລັບແນວຄວາມຄິດດຽວກັນ.

ອັນໃດເປັນ Stream API ທີ່ດີກວ່າສາມາດເບິ່ງໄດ້

ຫຼາຍບົດສະເໜີ ແລະການທົດລອງຊຸມຊົນຊີ້ໄປສູ່ອະນາຄົດທີ່ເປັນມິດກັບນັກພັດທະນາຫຼາຍຂຶ້ນ. ແນວ​ຄວາມ​ຄິດ​ຫຼັກ​ຍັງ​ຄົງ​ລວມ​ຢູ່​ກັບ​ຫຼັກ​ການ​ຈໍາ​ນວນ​ຫນຶ່ງ​: ການ​ປະ​ກອບ​ຫນ້າ​ທີ່​ໄດ້​ຮັບ​ການ​ , async iterator alignment , ແລະ ການ​ຫຼຸດ​ຜ່ອນ boilerplate. ຈິນຕະນາການວ່າຈະສາມາດຂຽນທໍ່ຂໍ້ມູນສະຕຣີມມິງໄດ້ຕາມທໍາມະຊາດເທົ່າທີ່ເຈົ້າຂຽນການຫັນປ່ຽນອາເຣ — chaining .map(), .filter(), ແລະ .take() ໂດຍກົງໃສ່ກະແສທີ່ສາມາດອ່ານໄດ້ໂດຍບໍ່ຈໍາເປັນຕ້ອງສ້າງວັດຖຸ TransformStream ລະດັບປານກາງ.

ນີ້ບໍ່ແມ່ນສົມມຸດຕິຖານ. ຂໍ້ສະເໜີ Iterator Helpers (ຕອນນີ້ຢູ່ຂັ້ນຕອນທີ 4 ໃນ TC39) ແລ້ວເອົາ .map(), .filter(), .take(), .drop(), ແລະ .flatMap() to synchronous it. ການຂະຫຍາຍຮູບແບບນີ້ໄປຫາ async iterators — ແລະໂດຍການຂະຫຍາຍ, ໄປຫາສະຕຣີມທີ່ອ່ານໄດ້ທີ່ເປີດເຜີຍ [Symbol.asyncIterator] — ເປັນຂັ້ນຕອນຕໍ່ໄປແບບທໍາມະຊາດ. ບາງ runtimes ແລະຫ້ອງສະຫມຸດໄດ້ເລີ່ມທົດລອງວິທີການນີ້ແລ້ວ, ໃຫ້ນັກພັດທະນາຂຽນລະຫັດເຊັ່ນ:

ການສະຕຣີມມິງທີ່ມີອໍານາດທີ່ສຸດແມ່ນອັນໜຶ່ງທີ່ຫາຍໄປ. ເມື່ອຜູ້ພັດທະນາສາມາດສະແດງການຫັນປ່ຽນຂໍ້ມູນເປັນລະບົບຕ່ອງໂສ້ຂອງຟັງຊັນງ່າຍໆ — ໂດຍບໍ່ຕ້ອງກັງວົນກ່ຽວກັບຕົວຄວບຄຸມ, ກົນລະຍຸດການຈັດຄິວ, ຫຼືການກົດດັນດ້ວຍມື — ເຂົາເຈົ້າສ້າງໄວຂຶ້ນ, ຈັດສົ່ງຂໍ້ບົກພ່ອງໜ້ອຍລົງ ແລະ ມີຄວາມສຸກກັບການເຮັດວຽກກັບຂໍ້ມູນການຖ່າຍທອດ.

ເປົ້າໝາຍບໍ່ແມ່ນເພື່ອທົດແທນ Stream API ລະດັບຕໍ່າທັງໝົດ. ຈະມີກໍລະນີທີ່ໃຊ້ຢູ່ສະເໝີ — ໂປໂຕຄອນທີ່ກຳນົດເອງ, ການຄວບຄຸມຄວາມຊົງຈຳແບບລະອຽດ, ການປະຕິບັດຕົວແປງສັນຍານຄູ່ — ບ່ອນທີ່ການເຂົ້າເຖິງຕົວຄວບຄຸມໂດຍກົງແມ່ນມີຄວາມຈຳເປັນ. ແຕ່ສຳລັບ 90% ຂອງກໍລະນີການນຳໃຊ້ ທີ່ກ່ຽວຂ້ອງກັບການອ່ານ, ການຫັນປ່ຽນ, ແລະການຂຽນຂໍ້ມູນຕາມລຳດັບ, ຊັ້ນ abstraction ຄວນກົງກັບຄວາມງ່າຍດາຍຂອງໜ້າວຽກ.

ບົດຮຽນຈາກລະບົບນິເວດອື່ນໆ

JavaScript ບໍ່ແມ່ນພາສາທຳອິດທີ່ຈະຕໍ່ສູ້ກັບການສະຕຣີມມິກ ergonomics. ລັກສະນະ Iterator ແລະ Stream ຂອງ Rust ສະເໜີໃຫ້ເຫັນເປັນຕົວຕົນທີ່ສົມໄດ້, ບໍ່ມີຕົ້ນທຶນ ເຊິ່ງເຮັດໃຫ້ນັກພັດທະນາສາມາດປະຕິບັດລະບົບຕ່ອງໂສ້ໄດ້ໂດຍບໍ່ຕ້ອງຈັດສັນການເກັບຂໍ້ມູນລະດັບກາງ. ໂມດູນ Stream ຂອງ Elixir ສະໜອງການນັບເລກທີ່ຂີ້ຄ້ານດ້ວຍໄວຍະກອນທີ່ສະອາດ, ເປັນມິດກັບທໍ່. ເຖິງແມ່ນວ່າ Java, ມັກຈະຖືກວິພາກວິຈານສໍາລັບ verbosity, ໄດ້ແນະນໍາ java.util.stream.Stream ໃນ Java 8 ດ້ວຍ API ທີ່ຄ່ອງແຄ້ວທີ່ຜູ້ພັດທະນາ JavaScript ຈະຮັບຮູ້ແລະອິດສາ.

ສິ່ງ​ທີ່​ລະບົບ​ນິເວດ​ເຫຼົ່າ​ນີ້​ມີ​ສ່ວນ​ຮ່ວມ​ແມ່ນ​ການ​ໃຫ້​ຄຳ​ໝັ້ນ​ສັນຍາ​ທີ່​ຈະ ສ້າງ​ກໍລະນີ​ທີ່​ເປັນ​ເລື່ອງ​ເລັກໆ​ນ້ອຍໆ. ການອ່ານໄຟລ໌, ການກັ່ນຕອງເສັ້ນ, ແລະການຂຽນຜົນໄດ້ຮັບໃຊ້ເວລາ 3-5 ແຖວຂອງລະຫັດ composable. ໃນ JavaScript ຂອງ Stream API ປະຈຸບັນ, ການດໍາເນີນງານດຽວກັນສາມາດຂະຫຍາຍອອກໄດ້ຢ່າງງ່າຍດາຍເຖິງ 20-30 ເສັ້ນໃນເວລາທີ່ທ່ານບັນຊີສໍາລັບການກໍ່ສ້າງນ້ໍາ, ການຈັດການຄວາມຜິດພາດ, ແລະ teardown ທີ່ເຫມາະສົມ. ຊ່ອງຫວ່າງບໍ່ກ່ຽວກັບຄວາມສາມາດ — ມັນແມ່ນກ່ຽວກັບ ergonomics.

ວິທີການຂອງ Python ຍັງເປັນຄຳແນະນຳ. ການທໍາງານຂອງເຄື່ອງກໍາເນີດໄຟຟ້າທີ່ມີ yield ສະຫນອງວິທີການທໍາມະຊາດໃນການຜະລິດແລະບໍລິໂພກຂໍ້ມູນຕາມລໍາດັບ lazily. JavaScript ມີຫນ້າທີ່ເຄື່ອງກໍາເນີດຄືກັນ, ແຕ່ການສົ່ງພວກມັນໄປຫາ Stream API ຮຽກຮ້ອງໃຫ້ມີການຫໍ່ພວກມັນຢູ່ໃນຕົວສ້າງ ReadableStream ດ້ວຍຕົວຄວບຄຸມແບບດຶງ. ການປະສົມປະສານທີ່ເຄັ່ງຄັດຂຶ້ນລະຫວ່າງເຄື່ອງປັ່ນໄຟ ແລະສາຍນ້ຳ — ບ່ອນທີ່ການທໍາງານຂອງເຄື່ອງປັ່ນໄຟສາມາດກາຍເປັນກະແສທີ່ສາມາດອ່ານໄດ້ໂດຍກົງ — ຈະກໍາຈັດຫມວດຫມູ່ທັງໝົດ.

ຜົນກະທົບຂອງໂລກທີ່ແທ້ຈິງຕໍ່ການພັດທະນາແອັບພລິເຄຊັນ

ນີ້ບໍ່ແມ່ນຄວາມກັງວົນທາງວິຊາການ. ການຖ່າຍທອດຂໍ້ມູນແມ່ນເປັນຫົວໃຈຂອງຄໍາຮ້ອງສະຫມັກເວັບໄຊຕ໌ທີ່ທັນສະໄຫມ. ເຫດການທີ່ເຊີບເວີສົ່ງ, ຄໍາຕອບ HTTP chunked, dashboards ການວິເຄາະໃນເວລາທີ່ແທ້ຈິງ, ການປະມວນຜົນການອັບໂຫລດໄຟລ໌, ການຖ່າຍທອດຮູບແບບ AI - ເຫຼົ່ານີ້ແມ່ນລັກສະນະປະຈໍາວັນ, ບໍ່ແມ່ນກໍລະນີທີ່ແຂບ. ເມື່ອ streaming primitive ໃຊ້ຍາກ, ຜູ້ພັດທະນາອາດຈະຫລີກລ້ຽງມັນທັງຫມົດ (buffing ທຸກສິ່ງທຸກຢ່າງເຂົ້າໄປໃນຫນ່ວຍຄວາມຈໍາ, ເຊິ່ງບໍ່ໄດ້ຂະຫນາດ) ຫຼືສ້າງທໍ່ທີ່ອ່ອນແອ, ຍາກທີ່ຈະຮັກສາທີ່ກາຍເປັນແຫຼ່ງການຜະລິດ.

ພິຈາລະນາສິ່ງທີ່ເກີດຂຶ້ນໃນລະດັບ. ແພລດຟອມເຊັ່ນ Mewayz, ເຊິ່ງປະມວນຜົນຂໍ້ມູນໃນທົ່ວ 207 ໂມດູນທຸລະກິດປະສົມປະສານ — ຈາກທໍ່ CRM ແລະ ໃບແຈ້ງໜີ້ ຈົນເຖິງການຄຳນວນເງິນເດືອນ ແລະ ການຕິດຕາມເຮືອ — ຈັດການຂໍ້ມູນຕາມລຳດັບປະລິມານອັນມະຫາສານພາຍໃນ. ການດໍາເນີນງານການສົ່ງອອກ, ການສ້າງບົດລາຍງານ, ການປະມວນຜົນເຫດການ webhook, ແລະການປັບປຸງ dashboard ໃນເວລາທີ່ແທ້ຈິງທັງຫມົດໄດ້ຮັບຜົນປະໂຫຍດຈາກການນ້ໍາປະສິດທິພາບ. ໃນເວລາທີ່ພື້ນຖານພາສາເບື້ອງຕົ້ນເຮັດໃຫ້ການຖ່າຍທອດມີຄວາມຫຍຸ້ງຍາກ, ຄ່າໃຊ້ຈ່າຍຈະເພີ່ມຂຶ້ນໃນທົ່ວທຸກໂມດູນແລະການໄຫຼເຂົ້າຂອງຂໍ້ມູນ. ວິສະວະກອນແພລດຟອມຈົບການສ້າງບົດຄັດຫຍໍ້ການຖ່າຍທອດພາຍໃນຢູ່ເທິງສຸດຂອງ abstractions ຂອງພາສາ, ເພີ່ມຄວາມສັບສົນທີ່ບໍ່ຈໍາເປັນ.

💡 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 →
  • ການປະມວນຜົນໄຟລ໌: ການອັບໂຫລດ ແລະວິເຄາະໄຟລ໌ CSV ທີ່ມີ 100K+ ແຖວຕ້ອງການການສະຕຣີມເພື່ອຫຼີກລ່ຽງຄວາມຈຳໝົດ — ແຕ່ API ປະຈຸບັນເຮັດໃຫ້ການປ່ຽນເປັນແຖວຂັ້ນພື້ນຖານເຖິງແມ່ນ verbose
  • ແຜງໜ້າປັດແບບສົດໆ: ການຖ່າຍທອດຂໍ້ມູນການວິເຄາະຈາກເຊີບເວີໄປຫາລູກຂ່າຍຜ່ານ SSE ຫຼື WebSocket ຜົນປະໂຫຍດຈາກການຫັນປ່ຽນທີ່ປະກອບໄດ້ (ການລວບລວມ, ການກັ່ນຕອງ, ການປິດກັ້ນ) ທີ່ເຈັບປວດທີ່ຈະສະແດງອອກໃນມື້ນີ້
  • ການຖ່າຍທອດການຕອບສະໜອງ AI: ເນື່ອງຈາກຄຸນສົມບັດທີ່ຂັບເຄື່ອນໂດຍ LLM ກາຍເປັນມາດຕະຖານໃນເຄື່ອງມືທາງທຸລະກິດ, ການຖ່າຍທອດການຕອບສະໜອງໂທເຄັນໂດຍໂທເຄັນຕໍ່ກັບ UI ແມ່ນຄວາມຄາດຫວັງພື້ນຖານ — ແລະເປັນກໍລະນີໃຊ້ທີ່ສົມບູນແບບສໍາລັບການຫັນປ່ຽນສະຕຣີມຕາມລະບົບຕ່ອງໂສ້
  • ການດຳເນີນການເປັນຊຸດ: ການປະມວນຜົນບັນຊີເງິນເດືອນສຳລັບພະນັກງານຫຼາຍພັນຄົນ, ການສ້າງໃບແຈ້ງໜີ້ຈຳນວນຫຼາຍ, ຫຼືການຊິງຄ໌ບັນທຶກ CRM ກັບລະບົບພາຍນອກທັງໝົດແມ່ນກ່ຽວຂ້ອງກັບການຖ່າຍທອດຂໍ້ມູນຜ່ານຂັ້ນຕອນການກວດສອບ, ການຫັນປ່ຽນ ແລະຜົນຜະລິດ
  • Webhook pipelines: Ingesting, validating, routing, and processing incoming webhook events from third-party integrations is inherently a streaming workload

ສິ່ງ​ທີ່​ຖືກ​ສະ​ເໜີ​ຢ່າງ​ແທ້​ຈິງ

ລະບົບນິເວດ JavaScript ກໍາລັງເຄື່ອນຍ້າຍໄປໃນຫຼາຍດ້ານ. ຂໍ້ສະເໜີ TC39 Iterator Helpers ໄດ້ລົງຈອດແລ້ວ, ນຳເອົາອົງປະກອບທີ່ມີປະໂຫຍດມາໃຫ້ຜູ້ເຮັດຊ້ຳແບບ synchronous. ສ່ວນຂະຫຍາຍແບບທໍາມະຊາດ — Async Iterator Helpers — ຈະນໍາເອົາວິທີດຽວກັນກັບ .map(), .filter(), .reduce(), .take(), ແລະ .flatMap() ວິທີການ async iterators, ເຊິ່ງສາມາດອ່ານໄດ້ແລ້ວ. [Symbol.asyncIterator]. ອັນດຽວນີ້ຈະຊ່ວຍປັບປຸງປະສົບການຂອງຜູ້ພັດທະນາໄດ້ຢ່າງຫຼວງຫຼາຍສຳລັບຮູບແບບການຖ່າຍທອດທົ່ວໄປທີ່ສຸດ.

ນອກເໜືອໄປຈາກ TC39, ການປະດິດສ້າງລະດັບການແລ່ນເວລາຍັງຊຸກຍູ້ຂອບເຂດ. Deno ໄດ້ທົດລອງກັບ ergonomic stream utilities ຫຼາຍ. Web Stream Toolbox ແລະຫ້ອງສະໝຸດຊຸມຊົນທີ່ຄ້າຍຄືກັນໃຫ້ຟັງຊັນຜູ້ຊ່ວຍທີ່ຫໍ່ສ່ວນ verbose ຂອງ API. ແລະມີຈັງຫວະການຂະຫຍາຍຕົວທາງຫລັງຂອງແນວຄວາມຄິດຂອງ ຫ້ອງສະໝຸດມາດຕະຖານສະຕຣີມ-ພື້ນເມືອງ — ຊຸດຂອງອຸປະກອນທີ່ສ້າງຂຶ້ນໃນຕົວ, ປັບປຸງໃຫ້ເໝາະສົມສຳລັບການປະຕິບັດງານການຖ່າຍທອດທົ່ວໄປເຊັ່ນ: ການແບ່ງສາຍ, ການແຍກ JSON, ການປະມວນຜົນ CSV, ແລະການບີບອັດທີ່ຜູ້ພັດທະນາໃນປັດຈຸບັນດຶງມາຈາກ npm.

ຍັງມີການໂຕ້ແຍ້ງທີ່ໜ້າສົນໃຈສຳລັບ ຄວາມໝາຍຄວາມຜິດພາດທີ່ດີຂຶ້ນ. ໃນ API ຂອງມື້ນີ້, ຂໍ້ຜິດພາດໃນລະບົບຕ່ອງໂສ້ທໍ່ສາມາດປ່ອຍໃຫ້ສາຍນ້ໍາຢູ່ໃນສະຖານະທີ່ບໍ່ຊັດເຈນ - ບໍລິໂພກບາງສ່ວນ, ດ້ວຍການລັອກ dangling ກັບຜູ້ອ່ານ. API ສະບັບປັບປຸງສາມາດຮັບຮອງເອົາການແຜ່ກະຈາຍຄວາມຜິດພາດທີ່ມີໂຄງສ້າງຄ້າຍຄືກັນກັບປະເພດ ຜົນໄດ້ຮັບ ຂອງ Rust ຫຼືຮັບຮອງເອົາສົນທິສັນຍາທີ່ຄວາມຜິດພາດໄຫຼຜ່ານທໍ່ເປັນຄ່າ, ອະນຸຍາດໃຫ້ຂັ້ນຕອນລຸ່ມນ້ໍາເພື່ອຈັດການຫຼືຟື້ນຕົວຈາກພວກມັນໂດຍບໍ່ມີການທໍາລາຍຕ່ອງໂສ້ທັງຫມົດ. ອັນນີ້ຈະເປັນການຫັນປ່ຽນເພື່ອຄວາມໜ້າເຊື່ອຖືໃນການຜະລິດ.

ເປັນຫຍັງອັນນີ້ຈຶ່ງສຳຄັນກວ່າທີ່ເຄີຍມີໃນປີ 2026

ສາມທ່າອ່ຽງລວມກັນເຮັດໃຫ້ streaming API ergonomics ຮີບດ່ວນກວ່າໃນທຸກຈຸດໃນປະຫວັດສາດຂອງ JavaScript. ທໍາອິດ, ຄອມພິວເຕີຂອບ — Cloudflare Workers, Vercel Edge Functions, Deno Deploy — ດໍາເນີນການພາຍໃຕ້ຂໍ້ຈໍາກັດຂອງຫນ່ວຍຄວາມຈໍາ ແລະ CPU ທີ່ເຂັ້ມງວດທີ່ buffering ຄໍາຕອບຫຼືຊຸດຂໍ້ມູນທັງຫມົດແມ່ນບໍ່ສາມາດໃຊ້ໄດ້. ການຖ່າຍທອດເປັນທາງເລືອກດຽວ ແລະຜູ້ພັດທະນາທີ່ນຳໃຊ້ກັບສະພາບແວດລ້ອມເຫຼົ່ານີ້ຕ້ອງການ API ທີ່ບໍ່ຕໍ່ສູ້ກັບພວກມັນ.

ອັນ​ທີ​ສອງ, ການ​ເຊື່ອມ​ໂຍງ AI ໄດ້​ເຮັດ​ໃຫ້​ການ​ສະ​ຕ​ຣີມ​ເປັນ​ຄຸນ​ສົມ​ບັດ​ທີ່​ຜູ້​ໃຊ້​ຕ້ອງ​ການ. ເມື່ອຜູ້ຊ່ວຍ AI ສ້າງການຕອບໂຕ້, ຜູ້ໃຊ້ຄາດວ່າຈະເຫັນ tokens ປາກົດໃນເວລາຈິງ, ບໍ່ແມ່ນລໍຖ້າການຕອບສະຫນອງທັງຫມົດເພື່ອ buffer. ທຸກໆແພລະຕະຟອມ SaaS - ຈາກລະບົບປະຕິບັດການທາງທຸລະກິດເຊັ່ນ Mewayz ໄປຫາເຄື່ອງມື AI ແບບດ່ຽວ - ດຽວນີ້ຕ້ອງການການບໍລິໂພກກະແສຂອງລູກຄ້າທີ່ເຂັ້ມແຂງ. API ປະຈຸບັນໃຊ້ໄດ້ກັບສິ່ງນີ້, ແຕ່ປະສົບການຂອງຜູ້ພັດທະນາໃນການແຍກວິເຄາະ, ການຫັນປ່ຽນ ແລະການສະແດງຜົນອອກຂອງ AI streamed ອາດຈະດີກວ່າຫຼາຍກັບຕົວປະຕິບັດການສະຕຣີມທີ່ປະກອບໄດ້.

ອັນທີສາມ, ການເຄື່ອນໄຫວ JavaScript ເຕັມ stack ຫມາຍຄວາມວ່ານັກພັດທະນາກໍາລັງຈັດການກັບການຖ່າຍທອດທັງສອງດ້ານຂອງຂອບເຂດເຄືອຂ່າຍ. ວິສະວະກອນຄົນດຽວອາດຈະຂຽນການຖ່າຍທອດທາງເຊີບເວີທີ່ປະມວນຜົນຜົນໄດ້ຮັບຂອງຖານຂໍ້ມູນ, ທໍ່ໃຫ້ເຂົາເຈົ້າຜ່ານການຫັນປ່ຽນ, ສົ່ງພວກມັນເປັນການຕອບ HTTP chunked, ແລະຫຼັງຈາກນັ້ນບໍລິໂພກນ້ໍາດຽວກັນກັບລູກຄ້າເພື່ອເຮັດໃຫ້ UI ກ້າວຫນ້າ. ເມື່ອ API streaming ອຶດອັດ, ຄວາມຂັດຂ້ອງນັ້ນຮູ້ສຶກຢູ່ທຸກຊັ້ນຂອງ stack.

ກ້າວໄປຂ້າງໜ້າ: ສິ່ງທີ່ນັກພັດທະນາສາມາດເຮັດໄດ້ໃນມື້ນີ້

ໃນຂະນະທີ່ພາສາພັດທະນາຂຶ້ນ, ຜູ້ພັດທະນາບໍ່ໄດ້ລໍຖ້າຢູ່. ຍຸດທະສາດການປະຕິບັດຫຼາຍຢ່າງສາມາດປັບປຸງປະສົບການການຖ່າຍທອດໃນໂຄງການປະຈຸບັນ. ການໃຊ້ ເຄື່ອງສ້າງ async ເປັນຮູບແບບການຂຽນຕົ້ນຕໍ — ແລະຫໍ່ພວກມັນໄວ້ໃນ ReadableStream.from() ບ່ອນທີ່ runtime ສະຫນັບສະຫນູນມັນ — ສະຫນອງ syntax ທີ່ສະອາດກວ່າການຈັດການຕົວຄວບຄຸມດ້ວຍມື. ຫ້ອງສະໝຸດເຊັ່ນ it-pipe ແລະ streaming-iterables ສະເໜີຕົວຊ່ວຍທີ່ປະກອບໄດ້ທີ່ນຳເອົາລະບົບຕ່ອງໂສ້ທີ່ມີປະໂຫຍດມາສູ່ async iterators ໃນມື້ນີ້.

ສຳລັບທີມທີ່ສ້າງແອັບພລິເຄຊັນທີ່ໃຊ້ຂໍ້ມູນຫຼາຍ, ການລົງທຶນໃນຊັ້ນຂໍ້ມູນການຖ່າຍທອດພາຍໃນບາງໆຈະຈ່າຍເງິນປັນຜົນ. ຊຸດຟັງຊັນ streamMap(), streamFilter(), ແລະ streamBatch() — ແຕ່ລະອັນທີ່ເອົາ async iterable ແລະສົ່ງຄືນ async iterable — ສະໜອງຄວາມສອດຄ່ອງຂອງ API ມາດຕະຖານທີ່ຂາດບໍ່ໄດ້, ໂດຍບໍ່ມີນໍ້າໜັກຂອງກອບການສະຕຣີມເຕັມ. ນີ້​ແມ່ນ​ຮູບ​ແບບ​ທີ່​ຂະ​ຫຍາຍ​ຈາກ​ຕົ້ນ​ແບບ​ການ​ເລີ່ມ​ຕົ້ນ​ໄປ​ເປັນ​ເວ​ທີ​ການ​ຈັດ​ການ​ຫຼາຍ​ລ້ານ​ການ​ດໍາ​ເນີນ​ງານ.

  1. ນຳ​ເອົາ​ເຄື່ອງ​ສ້າງ async ເປັນ​ຮູບ​ແບບ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ທ່ານ​ສຳ​ລັບ​ການ​ຜະ​ລິດ​ຂໍ້​ມູນ​ການ​ສະ​ຕ​ຣີມ — ພວກ​ມັນ​ສະ​ອາດ​ກວ່າ, ທົດ​ສອບ​ໄດ້​ກວ່າ, ແລະ​ສາ​ມາດ​ປະ​ກອບ​ໄດ້​ຫຼາຍ​ກ​່​ວາ​ການ​ສ້າງ ReadableStream ຄູ່​ມື
  2. ໃຊ້ ReadableStream.from() ເພື່ອເຊື່ອມຕໍ່ async iterables ໄປສູ່ໂລກ web streams ເມື່ອທ່ານຕ້ອງການ interop ກັບ APIs ທີ່ຄາດຫວັງວ່າ ReadableStream instances
  3. ສ້າງ ຫຼືຮັບຮອງເອົາຟັງຊັນທີ່ເປັນປະໂຫຍດບາງໆ ສໍາລັບການດໍາເນີນງານທົ່ວໄປ (ແຜນທີ່, ຕົວກອງ, batch, throttle) ໃນໄລຍະ async iterables ແທນທີ່ຈະສ້າງວັດຖຸ TransformStream
  4. ຜູ້ສະໜັບສະໜູນໃນ TC39 ແລະ ການສົນທະນາເວລາແລ່ນ — ຂໍ້ສະເໜີຕົວຊ່ວຍ async iterator ຕ້ອງການສຽງຜູ້ພັດທະນາທີ່ຊຸກຍູ້ໃຫ້ຈັດລໍາດັບຄວາມສໍາຄັນ
  5. ຂຽນການທົດສອບຕໍ່ກັບ async iterables, ບໍ່ແມ່ນການຖ່າຍທອດໂດຍກົງ — ນີ້ເຮັດໃຫ້ເຫດຜົນການຖ່າຍທອດຂອງທ່ານເຄື່ອນທີ່ ແລະກວດສອບໄດ້ງ່າຍຂຶ້ນ

JavaScript Stream API ເປັນພື້ນຖານທີ່ຈໍາເປັນ. ແຕ່ພື້ນຖານແມ່ນຫມາຍຄວາມວ່າຈະຖືກສ້າງຂຶ້ນ, ແລະຊັ້ນຕໍ່ໄປຂອງ abstraction - ຫນຶ່ງທີ່ເຮັດໃຫ້ການຖ່າຍທອດເປັນທໍາມະຊາດຄືກັບການເຮັດວຽກກັບ arrays - ແມ່ນເກີນກໍານົດ. ຊິ້ນສ່ວນແມ່ນຢູ່ໃນສະຖານທີ່: async iterators, ຫນ້າທີ່ຂອງເຄື່ອງກໍາເນີດໄຟຟ້າ, ແລະຮູບແບບຕົວຊ່ວຍຂອງ iterator. ສິ່ງທີ່ຕ້ອງການໃນປັດຈຸບັນແມ່ນຄວາມຕັ້ງໃຈລວມເພື່ອລວບລວມພວກມັນເຂົ້າໄປໃນມາດຕະຖານທີ່ກົງກັບວິທີທີ່ນັກພັດທະນາຄິດຕົວຈິງກ່ຽວກັບຂໍ້ມູນຕາມລໍາດັບ. ຜົນໄດ້ຮັບບໍ່ພຽງແຕ່ເປັນ API ທີ່ດີກວ່າ — ມັນຈະປົດລັອກການຖ່າຍທອດເປັນຮູບແບບເລີ່ມຕົ້ນແທນທີ່ຈະເປັນວິທີສຸດທ້າຍ, ເຮັດໃຫ້ແອັບພລິເຄຊັນໄວຂຶ້ນ, ປະຢັດຄວາມຈຳໄດ້ຫຼາຍຂຶ້ນ ແລະສ້າງຄວາມສະດວກຫຼາຍຂຶ້ນ.

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

ອັນໃດຜິດພາດກັບ JavaScript Stream API ປະຈຸບັນ?

Streams API ປະຈຸບັນທົນທຸກຈາກ boilerplate ຫຼາຍເກີນໄປ, ສັບສົນທາງ backpressure semantics, ແລະຫນ້າດິນ API ສະລັບສັບຊ້ອນເກີນໄປທີ່ຂັດຂວາງການຮັບຮອງເອົາ. ວຽກງານງ່າຍດາຍເຊັ່ນການອ່ານໄຟລ໌ຫຼືການປະມວນຜົນການຕອບ HTTP ຕ້ອງການລະຫັດຫຼາຍກ່ວາຄວາມຈໍາເປັນ. ຜູ້ພັດທະນາມັກຈະໃຊ້ຫ້ອງສະໝຸດຂອງພາກສ່ວນທີສາມ ຫຼືຮູບແບບເກົ່າກວ່າເຊັ່ນ: callbacks ແລະ emitters ເຫດການ, ຂ້າມມາດຕະຖານທັງຫມົດເພາະວ່າ ergonomics ມີຄວາມຮູ້ສຶກໃກ້ຊິດກັບ Java ວິສາຫະກິດຫຼາຍກ່ວາ JavaScript ທີ່ທັນສະໄຫມ.

Streams API ທີ່ດີກວ່າຈະປັບປຸງການພັດທະນາເວັບແນວໃດ?

API Streams ທີ່ຖືກອອກແບບໃໝ່ດ້ວຍໄວຍະກອນທີ່ສະອາດຂຶ້ນ, ຮອງຮັບການເຮັດຊ້ຳແບບ async ໃນຕົວ, ແລະວິທີການອົງປະກອບທີ່ເຂົ້າໃຈງ່າຍຈະເຮັດໃຫ້ການປະມວນຜົນຂໍ້ມູນແບບສົດໆງ່າຍຂຶ້ນຫຼາຍ. ນັກພັດທະນາສາມາດປ່ຽນລະບົບຕ່ອງໂສ້ການຫັນປ່ຽນຕາມທໍາມະຊາດ, ຈັດການກັບຄວາມກົດດັນດ້ານຫລັງຢ່າງໂປ່ງໃສ, ແລະຂຽນທໍ່ນ້ໍາໃນສ່ວນຫນຶ່ງຂອງລະຫັດ. ອັນນີ້ຈະເຮັດໃຫ້ການສະແດງຜົນທີ່ກ້າວໜ້າ, ຟີດຂໍ້ມູນສົດ, ແລະການປະມວນຜົນໄຟລ໌ຂະໜາດໃຫຍ່ສາມາດເຂົ້າເຖິງຜູ້ພັດທະນາ JavaScript ທຸກຄົນໄດ້, ບໍ່ພຽງແຕ່ຜູ້ທີ່ເຕັມໃຈທີ່ຈະຕໍ່ສູ້ກັບຕົ້ນສະບັບລະດັບຕໍ່າເທົ່ານັ້ນ.

ແພລດຟອມທຸລະກິດທີ່ທັນສະໄຫມສາມາດຈັດການການຖ່າຍທອດຂໍ້ມູນແບບສົດໆໄດ້ຢ່າງມີປະສິດທິພາບບໍ?

ແມ່ນແລ້ວ — ແພລດຟອມເຊັ່ນ Mewayz, 207-module business OS ເລີ່ມຕົ້ນທີ່ $19/mo, ແລ້ວໃຊ້ທໍ່ຂໍ້ມູນທີ່ມີປະສິດທິພາບຢູ່ເບື້ອງຫຼັງສໍາລັບການວິເຄາະ, ຂະບວນການເຮັດວຽກອັດຕະໂນມັດ, ແລະການລາຍງານສົດ. ໃນຂະນະທີ່ມາດຕະຖານການຖ່າຍທອດປັບປຸງໃນ JavaScript, ເຄື່ອງມືທີ່ສ້າງຂຶ້ນໃນເວັບສະເຕກຈະໃຫ້ປະສົບການສົດໆໄວຍິ່ງຂຶ້ນ, ຕັ້ງແຕ່ການອັບເດດ dashboard ທັນທີ ຈົນເຖິງການປະມວນຜົນໄຟລ໌ທີ່ບໍ່ມີຮອຍຕໍ່ໃນທົ່ວໂມດູນທຸລະກິດທີ່ປະສົມປະສານ.

ມີທາງເລືອກໃດແດ່ໃນຂະນະທີ່ Stream API ພັດທະນາ?

ປະຈຸບັນຜູ້ພັດທະນາແມ່ນອີງໃສ່ຫ້ອງສະໝຸດເຊັ່ນ: Node.js streams, RxJS ສໍາລັບການຂຽນໂປຼແກຼມ reactive, ຫຼື async generator ທີ່ຈັບຄູ່ກັບ loops for-await-of ເພື່ອຈັດການຂໍ້ມູນຕາມລໍາດັບໄດ້ຕາມ ergonomic ຫຼາຍ. polyfills ທີ່ເຂົ້າກັນໄດ້ກັບເວັບ ແລະຜູ້ຊ່ວຍຂັ້ນຕອນການສະເໜີຍັງສ້າງຊ່ອງຫວ່າງໃນ API ມາດຕະຖານ. ທີ່ສຳຄັນແມ່ນການເລືອກບົດຄັດຫຍໍ້ທີ່ສອດຄ່ອງກັບກໍລະນີການນຳໃຊ້ຂອງທ່ານ — ບໍ່ວ່າຈະເປັນຮູບແບບທີ່ສັງເກດໄດ້ສຳລັບແອັບພລິເຄຊັນທີ່ໜັກໜ່ວງ ຫຼື ການເຮັດຊ້ຳແບບ async ງ່າຍໆສຳລັບວຽກງານການປ່ຽນຂໍ້ມູນແບບກົງໄປກົງມາ.