JavaScript Blob.stream() — читання файлу потоком


Метод stream() повертає потік (ReadableStream) — щоб читати файл шматками, не тримаючи його цілком у пам'яті.

автор: NagarD

Загальний опис

Це єдиний правильний спосіб обробити великий файл. arrayBuffer() завантажив би гігабайт у пам'ять — потік читає його порціями й забуває прочитане.

Типові задачі: порахувати рядки в величезному CSV, перевірити вміст архіву, порахувати хеш поступово, показати чесний поступ обробки.

Потік можна передати прямо в fetch як тіло запиту — так файл піде на сервер, узагалі не потрапивши в пам'ять цілком.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
stream 76+ 69+ 14+ 63+ 79+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід