Агымдар тереӊдетип
Бүт көлөмдү эстутумга жүктөбөстөн, маалыматты бөлүк-бөлүк иштетиӊиз
- агымдын төрт түрүн айырмалоо -- Readable, Writable, Duplex, Transform;
- Readable'ди flowing режиминде, paused режиминде жана
for awaitаркылуу окуу; - агымдарды
pipe()жанаpipeline()менен туташтыруу; - кайра басым (backpressure) деген эмне жана эмне үчүн ал эстутумду коргоорун түшүндүрүү;
- маалыматты агып жатканда өзгөртүү үчүн өз Transform'уӊузду жазуу.
1. Агымдар эмне үчүн керек
4 ГБ көлөмүндөгү видеофайлды көчүрүү керек деп элестетиӊиз. Жөнөкөй ыкма бүт файлды өзгөрмөгө окуп, анан ошол өзгөрмөнү жазат:
const data = fs.readFileSync('movie.mp4'); // 4 GB now lives in RAM
fs.writeFileSync('copy.mp4', data);
Кичине файлдар үчүн бул иштейт, бирок чоӊдор үчүн бул кырсык: процесске буферди сактоо үчүн гана 4 ГБ эстутум керек, жана окуу толук бүткөнчө эч нерсе болбойт. Агымдар маалыматты бөлүктөр (chunks) менен (адатта бир жолу 64 КБ) жылдырып, эки маселени тең чечет. Эстутум кичинекей жана туруктуу бойдон калат, ал эми иш дароо биринчи бөлүктөн башталат.
Салыштыруу. Агымсыз ыкма -- бул бассейнди жаӊы жерге бүт бойдон көтөрүп ташуу менен бошотууга окшош. Агым -- бул шланг: суу үзгүлтүксүз агат, ар бир учурда шлангга батканынан ашык нерсени кармабайсыз, ал эми алыскы учу дароо толо баштайт.
Агым интерфейс болгондуктан (макулдашылган методдор жана окуялар топтому), файлды окуган ошол эле код тармак сокетинен же декомпрессордон окуй алат. Дал ушул айкалышуучулук алардын чыныгы күчү.