DokumentatsiyaReactServer tomonda ReactQachon qaysi API’dan foydalanish kerak

Qachon qaysi API’dan foydalanish kerak

renderToString ideal yechim emas, chunki u sinxron ishlaydi. Bu bir qancha sabablarga ko’ra muammoli:

Tarmoq kirish-chiqish (I/O) asinxron bo’ladi

Biz bajaradigan har qanday ma’lumotni olish operatsiyalari ma’lumotlar bazasidan, veb xizmatidan, fayl tizimidan va hokazolardan ma’lumot olishga bog’liq. Bu operatsiyalar ko’pincha asinxron tarzda amalga oshiriladi: ya’ni ular aniq diskret vaqt nuqtalarida boshlanib, yakunlanadi, bir vaqtning o’zida emas. renderToString sinxron ishlagani sababli, u asinxron so’rovlarning tugashini kutolmaydi va darhol brauzerga satrni jo’natadi. Bu server yakunlay olmasligini va klient dastlabki qobiqni ma’lumot yuklanishidan oldin olishini anglatadi, va ideal holatda server hidratsiyani tugatgan joydan boshlab ishlashni davom ettiradi. Bu tarmoq sharsharalari orqali ishlash muammolarini keltirib chiqaradi.

Serverlar bir nechta klientlarga xizmat ko’rsatadi

Agar renderToString chaqiradigan server satrga aylantirish bilan band bo’lsa va 30 ta klient unga yangi so’rov yuborsa, bu yangi klientlar server joriy ishini tugatishini kutishlariga to’g’ri keladi. renderToString sinxron ishlagani sababli, u tugagunga qadar bloklanadi. Serverlar va klientlar o’rtasidagi birdan ko’pga munosabatda (one-to-many relationship) bloklanish, klientlar kerak bo’lgandan ko’ra uzoqroq kutishlarini anglatadi.

Yangi, oqimga asoslangan asinxron yondashuvlar

Yangi API’lar bo’lgan renderToPipeableStream va renderToReadableStream ushbu ikkala muammoni hal qiladi. renderToReadableStream brauzer uchun mos keladi, renderToPipeableStream esa server muhiti uchun. Shunday qilib, agar “serverda ishlatish uchun eng yaxshi API qaysi?” degan savol tug’iladigan bo’lsa, javob foydalanish muhitiga bo’gliq holda renderToPipeableStream yoki renderToReadableStream bo’ladi.

Shuni aytish kerakki, renderTo*Stream API’lari hozirda eng yaxshilari bo’lib ko’rinayotgan bo’lsa-da, hozirgi paytda ushbu API’lar atrofida “to’liq foydalanuvchi ssenariysi” mavjud emas. Hozir mavjud bo’lgan ko’plab uchinchi tomon kutubxonalari ular bilan ishlamaydi, ayniqsa ma’lumot olish yoki CSS kutubxonalari bilan bog’liq holda. Chunki ular kontseptual ravishda serverda “to’liq ishga tushirish”ni talab qiladi, so’ngra ma’lumotlarni yaratadi va keyin o’sha ma’lumot bilan dasturni qayta render qilib, oqimdan foydalana boshlaydi. Ular dastur serverda hali to’liq yuklanmagan, ammo brauzerda qisman hidratsiya qilinishi kerak bo’lgan holatlarni qo’llab-quvvatlamaydi.

React’dagi API’larning cheklanishi

Bu React’dagi muammo: hozirgi yozish paytida React 18 versiyasida uchinchi tomon ma’lumotlarini oqim yoki qisman hidratsiyaga yordam beruvchi API’lar mavjud emas. React jamoasi yaqinda react-domga prefetchDNS, preconnect, preload kabi yangi API’lar qo’shdi, ammo ular faqat React 19 versiyasi bilan taqdim etiladi. Ushbu API’lar mavjud bo’lsa ham, renderToPipeableStreamni ishlatish imkoniyatini oshirish uchun hali ham bir nechta muhim API’lar yetishmaydi.

Hozirgi vaqtda renderToPipeableStreamdan foydalanishning yagona haqiqiy imkoniyati - bu birinchi navbatda renderToPipeableStreamni chaqirishdan oldin barcha kerakli ma’lumotlarni oldindan yuklash (yoki CSS kutubxonasi holatida, renderToString bilan ko’rsatilishi kerak bo’lgan barcha class’larni “oldindan yozib olish” uchun to’liq dasturni taqdim etish) bo’ladi. Bu esa asosan uning renderToString ustidan ustunliklarini yo’q qiladi va uni yana sinxron API’ga aylantiradi.

Barcha jihatlarni hisobga olgan holda, bular murakkab mavzular bo’lib, loyihangizga va foydalanish holatlariga qarab qaysi API’larni ishlatishni aniqlash uchun ehtiyotkorlik bilan rejalashtirishni talab qiladi. Shunday qilib, javob yana “bu, vaziyatga bog’liq” yoki “shunchaki freymvorkdan foydalanish” va kengroq jamoatchilikka qaror qilishni topshirish bo’lishi mumkin.