تكرار السؤال: …
الإجابة المختصرة
تحدث عندما ينتج الـ Readable بيانات بمعدل أسرع من قدرة الـ Writable على استهلاكها، وتعالج بإيقاف القراءة مؤقتاً عند امتلاء الـ buffer ثم استئنافها عند حدث drain.
الشرح
إذا كانت سرعة قراءة ملف أسرع بكثير من سرعة كتابته، ستتراكم البيانات في ذاكرة الـ Writable حتى تنفد الـ RAM. تعالج Node.js ذلك بإعادة write(chunk) لـ false عند امتلاء الـ buffer، حيث يوقف المنتج القراءة وينتظر حدث drain.
مثال بالكود
if (!writer.write(data)) {
reader.pause();
writer.once("drain", () => reader.resume());
}أخطاء شائعة
- تجاهل القيمة المعادة من writer.write() ومواصلة ضخ البيانات مما يؤدي لزيادة استهلاك الذاكرة.
أسئلة متابعة
- ما هي الأنواع الأربعة للـ Streams في Node.js وما وظيفة كل منها؟
- ما هو دور خيار highWaterMark في الـ Streams وكيف يؤثر على كفاءة الذاكرة والأداء؟