Типы потоков:
- Потоки с возможностью записи: места назначения данных (запись файлов, ответы HTTP).
- Дуплексные потоки: доступны как для чтения, так и для записи (сокеты TCP).
- Преобразование потоков: изменение данных по мере их прохождения (сжатие, шифрование).
- PassThrough Streams: простые дуплексные потоки для тестирования и композиции.
- Потоки объектов: обрабатывайте объекты JavaScript, а не только буферы.
Преимущества:
- Эффективность памяти: обработка данных порциями, а не загрузка целиком.
- Обработка противодавления: встроенное управление потоком данных предотвращает переполнение памяти.
- Компонуемость: потоки можно объединять для комплексной обработки.
- Управление событиями: неблокирующая обработка посредством генерации событий.
- Обработка в реальном времени: обрабатывайте данные по мере их поступления.
- Управление ресурсами: автоматическая очистка и обработка ресурсов.
Stream Pipeline:
- Pipe Method: Connects readable stream to writable stream
- Pipeline Function: Better error handling than pipe method
- Transform Chains: Multiple transform streams in sequence
- Error Propagation: Proper error handling across stream pipeline
- Очистка: автоматическая очистка ресурсов при завершении или сбое конвейера.
Use Cases:
- File Processing: Large file uploads, downloads, and transformations
- HTTP Streaming: Streaming responses and request body parsing
- Data Processing: ETL operations on large datasets
- Real-time Analytics: Processing live data feeds
- Media Streaming: Audio and video content delivery
- Log Processing: Real-time log analysis and forwarding
Best Practices:
- Always handle stream errors to prevent crashes
- Use pipeline() instead of pipe() for better error handling
- Implement proper backpressure handling in custom streams
- Close streams properly to prevent resource leaks
- Use appropriate stream modes (flowing vs paused)
Итог
Key takeaway for interview: Explain the use of streams in Node.js for efficient data handling.