JavaScript Blob.stream() — читання файлу потоком
Метод stream() повертає потік (ReadableStream) — щоб читати файл шматками, не тримаючи його цілком у пам'яті.
Загальний опис
Це єдиний правильний спосіб обробити великий файл. arrayBuffer() завантажив би гігабайт у пам'ять — потік читає його порціями й забуває прочитане.
Типові задачі: порахувати рядки в величезному CSV, перевірити вміст архіву, порахувати хеш поступово, показати чесний поступ обробки.
Потік можна передати прямо в fetch як тіло запиту — так файл піде на сервер, узагалі не потрапивши в пам'ять цілком.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| stream | 76+ | 69+ | 14+ | 63+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| stream | 76+ | yes | yes | 14+ |
Приклади
+ запропонувати свій приклад у пісочниці
Порахувати рядки у величезному файлі, не з'ївши пам'ять.
async function countLines(file) {
const reader = file.stream()
.pipeThrough(new TextDecoderStream())
.getReader();
let lines = 0;
let read = 0;
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
lines += (value.match(/\n/g) ?? []).length;
read += value.length;
console.log(Math.round(read / file.size * 100) + '%');
}
return lines;
}
Коментарі
Коментарів ще немає — будьте першим!