Readable Streams
データをチャンク単位で読み取ります。
「Readable Streams」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。
ストリームとは
Streams API は、すべてのデータをメモリに読み込むのではなく、チャンクが到着するたびにデータを段階的に処理します。これにより、大容量のダウンロード、動画、ライブフィードを効率的に扱えます。
ReadableStream
ReadableStream は、チャンク単位で読み取るデータソースです。ブラウザーでは、fetch のレスポンスやファイルの Blob などに公開されています。
ストリームを作成する
チャンクを enqueue し、完了を通知する start(controller) を持つ基盤ソースオブジェクトを使って作成します。
const stream = new ReadableStream({
start(controller) {
controller.enqueue("chunk 1");
controller.enqueue("chunk 2");
controller.close();
}
});リーダーを取得する
getReader() はストリームをロックし、リーダーを返します。ロック中は、ほかのコンシューマーが読み取ることはできません。
const reader = stream.getReader();チャンクを読み取る
reader.read() は、{ value, done } に解決される Promise を返します。ストリームを最後まで読み終えると、done は true になります。
const { value, done } = await reader.read();
console.log(value, done);読み取りループ
done が true になるまで read() を繰り返し、ストリーム全体を読み取ります。
const reader = stream.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) break;
console.log("got", value);
}ロックを解放する
reader.releaseLock() を呼び出してストリームのロックを解除すると、別のリーダーが引き継げるようになります。
reader.releaseLock();pull メソッド
基盤ソースには pull(controller) を定義できます。これはコンシューマーが追加のデータを求めたときに呼び出され、必要になった時点でデータを遅延生成できます。
let i = 0;
new ReadableStream({
pull(controller) {
controller.enqueue(i++);
if (i > 5) controller.close();
}
});非同期反復
最新の環境では、ReadableStream は非同期反復可能です。そのため、手動のループの代わりに for await...of を使えます。
for await (const chunk of stream) {
console.log(chunk);
}ストリームをキャンセルする
reader.cancel(reason) はストリームを途中で停止し、リソースを解放します。大容量のダウンロードを中止するときに重要です。
await reader.cancel("user navigated away");tee: ストリームを分割する
tee() は、すべてのチャンクのコピーをそれぞれ受け取る2つのストリームを返します。データを2回読み取る場合(たとえばキャッシュと表示)に便利です。
const [a, b] = stream.tee();
// read a and b independentlyクイックチェック
ReadableStream をテストします。
まとめ: ReadableStream
ReadableStream を作成し、リーダーを取得し、ループ内で read() を使ってチャンクを読み取り、ロックを解放し、pull でデータを遅延生成し、for await で反復し、tee() で分割しました。次は fetch レスポンスのストリーミングです。
よくある質問
「Readable Streams」レッスンは無料ですか?
はい。「Readable Streams」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。
「Readable Streams」で何を学びますか?
データをチャンク単位で読み取ります。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Readable Streams」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Readable Streams
- fetch レスポンスのストリーミング
- Transform Streams
- バックプレッシャーとパイプ処理