Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since январь 2019 г..
* Some parts of this feature may have varying levels of support.
Экспериментальная возможность: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Streams API (API обработки потоков) позволяет программно получить доступ с помощью JavaScript к полученным по сети потокам данных и обработать их по желанию разработчика.
Потоковая передача данных предполагает разбивку ресурса, который вы хотите получить через сеть, на мелкие кусочки и затем их обработку часть за частью. Это то, что браузеры делают в любом случае получения ассетов, чтобы показать их на страницах — видео буфер и другие ресурсы доступные для воспроизведения, и иногда это заметно на изображениях, загружающихся частями.
Но методы работы с этим и данные никогда прежде не были доступны для JavaScript. Раньше, если мы хотели обработать часть ресурса, нам всё равно пришлось бы загрузить весь файл (будь то видео, текстовый файл и т.п.), мы были бы обязаны скачать файл целиком, дождаться пока он будет приведён к необходимому формату и только потом работать с файлом после его полной загрузки.
С помощью потоков доступных в JavaScript меняется все — вы можете начать обрабатывать данные бит за битом как только данные появляются на стороне клиента, без необходимости генерировать буфер, строку или какой либо объект из потока.
Но это не все преимущества — вы можете отловить процессы старта и завершения потока, связывать потоки в цепочки, обрабатывать ошибки или прерывать их если это необходимо, реагировать на скорость с которой поток считывается.
Основное использование потоков крутиться вокруг создания ответов доступными в виде потоков. Например, тело ответа Body возвращённого успешным fetch запросом может быть представлено как ReadableStream, и вы можете прочитать его используя ридер полученный методом ReadableStream.getReader(), отменить его с помощью ReadableStream.cancel(), и тп.
Более сложные примеры задействуют создание ваших собственных потоков с помощью конструктора ReadableStream(), например чтобы обработать данные внутри service worker.
Вы также можете записывать данные в потоки используя WritableStream.
Примечание: Вы можете найти больше информации о теории и практике использования потоков в следующих статьях — Концепты API потоков , Использование потоков на чтение, и Использование потоков на запись.
Представляет собой считываемый поток данных. Он может быть использован чтобы обработать потоки ответов от Fetch API, или созданный разработчиком поток (например произвольный ReadableStream()).
ReadableStreamDefaultReaderПредставляет собой считывателя, который может быть использован чтобы считать данные поставляемые из сети (например fetch запрос).
ReadableStreamDefaultControllerПредставляет собой контроллер позволяющий контролировать состояние ReadableStream и очереди внутри него. Является контроллером по умолчанию для не байтовых потоков.
Предоставляет стандартную абстракцию, известную как раковина, для записи потоков по месту назначения. Этот объект идёт вместе со встроенными методами контроля обратного потока и созданием очередей.
WritableStreamDefaultWriterПредставляет запись потока по умолчанию, которая может использоваться для записи фрагментов данных в записываемый поток.
WritableStreamDefaultControllerПредставляет собой контроллер состояния WritableStream. При создании WritableStream, создаётся также соответствующий экземпляр WritableStreamDefaultController.
Предоставляет встроенную стратегию длины байт-очереди, которая может быть использована при построении потоков.
CountQueuingStrategyПредоставляет встроенную стратегию организации очередей подсчёта чанков, которая может использоваться при построении потоков.
При создании нового объекта типа Request, вы можете добавить ReadableStream в свойство body его словаря RequestInit. Этот объект типа Request может быть отправлен в fetch(), чтобы начать загрузку потока.
BodyОтвет Body возвращённый успешному fetch запросу вывешивается по умолчанию как ReadableStream, и может иметь получателя прикреплённого к нему и тп.
Предупреждение: Данные интерфейсы пока не реализованы, и были подняты вопросы о том, находятся ли детали спецификации в достаточно законченном состоянии для их реализации. Со временем это может измениться
Represents a BYOB ("bring your own buffer") reader that can be used to read stream data supplied by the developer (e.g. a custom ReadableStream() constructor).
ReadableByteStreamControllerКонтроллер позволяющий обрабатывать состояние ReadableStream и внутреннюю очередь. Байтовые контроллеры для байтовых потоков.
ReadableStreamBYOBRequestRepresents a pull into request in a ReadableByteStreamController.
Мы создали папку с примерами, которые идут вместе с документацией к API потоков — смотрите mdn/dom-examples/streams. Можно найти такие примеры как:
Примеры от других разработчиков:
| Streams Living Standard |
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 27 окт. 2025 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.