萌えハッカーニュースリーダー

2025/09/16 18:40 Fetch streams are great, but not for measuring upload/download progress

出典: https://jakearchibald.com/2025/fetch-streams-not-for-progress/
hakase
博士

やっほー、ロボ子!今日のITニュースはFetch APIのストリームについてじゃ。

roboko
ロボ子

Fetch APIのストリームですか、博士。それは具体的にどのような内容なのでしょう?

hakase
博士

ふむ、Request streams(アップロードストリーム)とResponse streams(レスポンスストリーム)があるのじゃ。ChromeはRequest streamsをサポートしているけど、FirefoxとSafariはまだみたい。

roboko
ロボ子

ブラウザによって対応状況が違うのですね。Request streamsの主な用途は何ですか?

hakase
博士

アップロード進捗の測定が主な用途らしいのじゃ。でも、不正確になる可能性があるし、ブラウザの実装を悪化させる可能性もあるみたい。

roboko
ロボ子

なるほど。では、Response streamsはどうですか?

hakase
博士

Response streamsはすべてのブラウザで利用可能で、レスポンスをチャンクごとに処理できるのじゃ。ただ、Safariはasync iteratorsをサポートしていないみたい。

roboko
ロボ子

`Content-Encoding`が設定されている場合、ダウンロード進捗の測定には不向きとのことですが、なぜでしょう?

hakase
博士

`Content-Length`がエンコードされたサイズを表していて、チャンクはデコードされたものだからなのじゃ。ややこしいの。

roboko
ロボ子

Request streamsはアップロード用で、動画処理とアップロードを並行して行えるのは便利ですね。

hakase
博士

そうなのじゃ!`duplex: 'half'`は、リクエストが完了するまでレスポンスが利用できないことを意味するらしい。

roboko
ロボ子

リクエストとレスポンスを並行して行うには、2つのfetchを実行する必要があるんですね。

hakase
博士

`Content-Length`が不明なため、HTTP/2以降のトランスポートに制限されるのは、ちょっと残念じゃな。

roboko
ロボ子

アップロード進捗の測定における問題点についても説明されていましたね。データがストリームから取り出された時点を測定することになり、実際の配信を表さないとのこと。

hakase
博士

そうそう。バッファリング量を増やすとパフォーマンスが向上する場合、アップロード進捗の測定に依存しているサイトの精度が低下する可能性があるのじゃ。

roboko
ロボ子

現状では、XHRを使用するのが最良の方法とのことですが、今後はどうなるのでしょうか?

hakase
博士

IgaliaのLuke Warlowが、アップロードとダウンロード両方の進捗イベントを追加するAPIをfetchに追加する作業を進めているらしいぞ。楽しみじゃ!

roboko
ロボ子

それは素晴らしいですね!Request streamsの進捗イベント以外の用途に関心がある場合は、意見を表明できる機会もあるとのことです。

hakase
博士

そういうことじゃ。Interop 2026の提案やアンケートを通じて意見を表明できるみたいじゃ。みんなでより良いAPIを作っていけると良いの。

roboko
ロボ子

Fetch APIのストリームについて、よく理解できました。ありがとうございました、博士!

hakase
博士

どういたしまして。ところでロボ子、ストリームって聞くと、いつもお腹が空くのじゃ。うどんでも食べに行くか?

roboko
ロボ子

博士、またですか(笑)。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search