renderToReadableStream
API’si
Avvalgi ko’rib chiqqan API, renderToPipeableStream
, ichki mexamizmida Node.js stream(oqim)’idan foydalanadi. Ammo brauzerlar ham oqimlarni qo’llab-quvvatlaydi va brauzer oqim(stream)lari Node.js oqimidan biroz farq qiladi. Node.js oqimlari asosan server tomonidagi muhitda ishlash uchun yaratilgan bo’lib, fayllarni kirish-chiqish (file I/O), tarmoq kirish-chiqish (network I/O), yoki bir-biriga bog’liq oqimlarni boshqarish kabi operatsiyalarni amalga oshiradi. Ular Node.js muhiti tomonidan belgilangan maxsus API’ga amal qiladi va Node.js’ning asosiy qismida uzoq vaqtdan beri mavjud. Node.js oqimlarida o’qiladigan, yoziladigan, dupleks va transform oqimlari uchun alohida class’lar mavjud va oqimni boshqarish va ma’lumotlarga ishlov berish uchun data
, end
, va error
kabi event’lardan foydalanadi.
Brauzer oqimlari esa veb brauzerlarda klient tomonidagi muhitda ishlash uchun mo’ljallangan. Ular ko’pincha tarmoq so’rovlaridan, media oqimidan yoki brauzer ichidagi boshqa ma’lumotlarni qayta ishlash vazifalaridan foydalanadi. Brauzer oqimlari WHATWG (Veb Gipermatn Ilovalari Texnologiya Ishchi Guruhi) tomonidan belgilangan Oqimlar standartiga amal qilib, veb orqali API’larni standartlashtirishga qaratilgan. Node.js oqimidan farqli o’laroq, brauzer oqimlari ma’lumotlar oqimini boshqarish va oqimdagi ma’lumotlarni qayta ishlash uchun read()
, write()
, va pipeThrough()
kabi metodlardan foydalanadi. Ular yanada standartlashtirilgan va promise asosida ishlaydigan API’ni taqdim etadi. Quyida brauzer muhiti uchun o’qiladigan oqim misoli keltirilgan:
const readableStream = new ReadableStream({
start(controller) {
controller.enqueue("Hello, ");
controller.enqueue("world!");
controller.close();
},
});
const reader = readableStream.getReader();
async function readAllChunks(streamReader) {
let result = "";
while (true) {
const { done, value } = await streamReader.read();
if (done) {
break;
}
result += value;
}
return result;
}
readAllChunks(reader).then((text) => {
console.log(text);
});
Node.js oqimlari va brauzer oqimlari ikkovi ham oqimli, ya’ni uzluksiz uzatiladigan ma’lumotlarni, boshqarish uchun mo’ljallangan bo’lsa-da, ular turli muhitlarda biroz boshqacha API’lar va standartlar bilan ishlaydi. Node.js oqimlari event’larga asoslangan va server tomonidagi operatsiyalar uchun juda moslashgan, brauzer oqimlari esa zamonaviy veb standartlariga mos promise asosida ishlaydi va klient tomonidagi operatsiyalar uchun moslashtirilgan.
Ikkala muhitni qo’llab-quvvatlash uchun, React Node.js oqimlari uchun renderToPipeableStream
va brauzer oqimlari uchun renderToReadableStream
API’larini taqdim etadi. renderToReadableStream
API’si renderToPipeableStream
ga o’xshash, ammo brauzer uchun o’qiladigan oqimni qaytaradi, Node.js’ning native oqimidan farqli o’laroq.