😊

fetchLaterAPIを触ってみる

に公開

概要

chrome135で、fetchLaterAPIが実装されました。
https://developer.chrome.com/release-notes/135?hl=ja#fetchlater_api
こちらのAPIを下記環境で、検証しまとめます
https://github.com/imamiya-masaki/fetchlater-test

fetchLaterAPIの概要

fetchLaterが実装されるまでは、(歴史を振り返ればもう少しありますが...)下記二つがあるかと思います。

fetchLaterAPIはsendBeaconの難点を解消したものになります。
https://developer.mozilla.org/en-US/docs/Web/API/Window/fetchLater
ページが破棄された時でも、ビーコンの通信を行うことができ、さらにfetchAPIと同等のカスタマイズ性を持っています。

動作の確認

こちらの検証環境をChrome136上で動作を確認します。
https://github.com/imamiya-masaki/fetchlater-test

破棄時にリクエストが行われることを確認する

検証環境で、2回fetchLaterを実行したのが下記になります。

破棄時(ページリロード時)に、検証環境にGETリクエストが発生しているのがわかります。

※こちらに関して、sendBeaconの実行タイミングを確認すると、fetchLaterと異なり、ボタン押下時にbeaconが送信されているのがわかります。

sendBeaconが実行時に即座に送信されることが約束されているわけではないです
参考: https://w3c.github.io/beacon/#sendbeacon-method

DevTools上で表示を確認する

fetchLaterは、optionに、activateAfterというプロパティを受け付けます。
こちらを設定することでリクエストのタイミングを、ページ破棄時だけではなく、fetchLater実行から、activateAfterミリ秒後にリクエストを行う様にできます。
https://developer.mozilla.org/en-US/docs/Web/API/DeferredRequestInit#activateafter

こちらを設定し、DevToolsでどのような表示になるかを確認します。

index.html
 await fetchLater(url,{ method: 'GET', headers: {"test": "test"}, activateAfter: 1000 })

ネットワークパネルで確認する

実際に指定したミリ秒後に、ネットワークリクエストが発生し、パネルで確認できます。

こちらは、特にオプションで設定で変更していなければ、タイプ、優先度などはfetchAPIと同等のものになっているのがわかります。

パフォーマンスパネルで確認する


受け取り側(ターミナルのログ)では、fetchLaterのリクエストが実行されることは確認できますが、
少なくとも、Chrome136上ではfetchLaterのリクエストはパフォーマンスパネルで確認できません。
fetchLater自体がネットワーク帯域のボトルネックになる様な場合には、注意が必要そうです。

Discussion