Chrome 103 の新機能

必知事項は次のとおりです。

  • 新しい HTTP 103 ステータス コードが導入され、ページの受信が開始する前に、プリロードするコンテンツをブラウザが決定できるようになりました。
  • Local Font Access API を使用すると、ウェブ アプリケーションでユーザーのパソコンにインストールされているフォントを列挙して使用できます。
  • AbortSignal.timeout() を使用すると、非同期 API にタイムアウトを簡単に実装できます。
  • 他にも多数の機能があります。

Pete LePage と申します。Chrome 103 のデベロッパー向け新機能を見てみましょう

HTTP 103 ステータス コード 103 - 早期ヒント

ページのパフォーマンスを改善する方法の 1 つは、リソースヒントを使用することです。後で必要になる可能性のある内容について、ブラウザに「ヒント」を与えます。たとえば、ファイルのプリロードや別のサーバーに接続するなどです。

<link as="font" crossorigin="anonymous"
      href="..." rel="preload">
<link as="font" crossorigin="anonymous"
      href="..." rel="preload">
<link href="cdn.example.com"
      rel="preconnect">

ただし、サーバーがページの少なくとも一部を送信するまで、ブラウザはこれらのヒントに応答できません。

ブラウザがページをリクエストしても、サーバーがページの生成に数百ミリ秒かかるとします。ブラウザがページの受信を開始するまで、この状態が続くだけです。ただし、ページで常に特定のサブリソース(CSS ファイル、JavaScript、画像など)が必要になることをサーバーが把握している場合は、新しい HTTP 103 Early Hints ステータス コードですぐに応答し、ブラウザにそれらのサブリソースをプリロードするようリクエストできます。

サーバーがページを生成したら、通常の HTTP 200 レスポンスでページを送信できます。ページが送信されると、ブラウザは必要なリソースの読み込みをすでに開始しています。

これは新しい HTTP ステータス コードであるため、使用するにはサーバーを更新する必要があります。

HTTP 103 早期ヒントを使ってみる:

Local Font Access API

ウェブ上のフォントは常に課題でした。特に、ユーザーが独自のグラフィックやデザインを作成できるアプリでは、その傾向が強くなります。これまで、ウェブアプリで使用できるのはウェブフォントのみでした。ユーザーがパソコンにインストールしたフォントのリストを取得する方法はありませんでした。また、フォント テーブルの完全なデータにアクセスする方法もありませんでした。これは、独自のカスタム テキスト スタックを実装する必要がある場合に重要です。

新しい Local Font Access API を使用すると、ウェブ アプリケーションでユーザーのデバイス上のローカル フォントを列挙し、フォント テーブル データにアクセスできます。

デバイスにインストールされているフォントのリストを取得するには、まず権限をリクエストする必要があります。

// Ask for permission to use the API
try {
  const status = await navigator.permissions.request({
    name: 'local-fonts',
  });
  if (status.state !== 'granted') {
    throw new Error('No Permission.');
  }
} catch (err) {
  if (err.name !== 'TypeError') {
    throw err;
  }
}

次に、window.queryLocalFonts() を呼び出します。ユーザーのデバイスにインストールされているすべてのフォントを含む配列を返します。

const opts = {};
const pickedFonts = await self.queryLocalFonts();
for (const fontData of pickedFonts) {
  console.log(fontData.postscriptName);
  console.log(fontData.fullName);
  console.log(fontData.family);
  console.log(fontData.style);
}

フォントのサブセットのみを取得する場合は、postscriptNames パラメータを追加してフィルタできます。

const opts = {
  postscriptNames: [
    'Verdana',
    'Verdana-Bold',
    'Verdana-Italic',
  ],
};
const pickedFonts = await self.queryLocalFonts(opts);

詳細については、web.dev の Tom の記事「ローカルフォントで高度なタイポグラフィを使用する」をご覧ください。

AbortSignal.timeout() によるタイムアウトの簡素化

JavaScript では、AbortControllerAbortSignal を使用して非同期呼び出しをキャンセルします。

たとえば、fetch() リクエストを行うときに、AbortSignal を作成して fetch() に渡すことができます。fetch() が返される前にキャンセルするには、AbortSignal のインスタンスで abort() を呼び出します。これまで、特定の時間が経過した後に中止するには、それを setTimeout() でラップする必要がありました。

const controller = new AbortController();
const signal = controller.signal;
const resp = fetch(url, { signal });

setTimeout(() => {
  // abort the fetch after 6 seconds
  controller.abort();
}, 6000);

幸い、AbortSignal の新しい timeout() 静的メソッドにより、この作業が簡単になりました。指定したミリ秒後に自動的に中止される AbortSignal オブジェクトを返します。以前は数行のコードだったものが、たった 1 行になりました。

const signal = AbortSignal.timeout(6000);
const resp = fetch(url, { signal });

AbortSignal.timeout() は Chrome 103 でサポートされており、Firefox と Safari ではすでにサポートされています。

その他

もちろん、他にもたくさんあります。

  • avif 画像ファイル形式をウェブ共有で共有できるようになりました
  • Chromium は、URL の変更直後に popstate を呼び出して、Firefox と一致するようになりました。両方のプラットフォームで、イベントの順序は popstatehashchange の順になりました。
  • Element.isVisible() は、要素が表示可能かどうかを示します。

関連情報

以下に、主なハイライトをいくつかご紹介します。Chrome 103 のその他の変更については、以下のリンクをご覧ください。

登録

最新情報を入手するには、Chrome Developers の YouTube チャンネルチャンネル登録してください。新しい動画が公開されると、メール通知が届きます。

Pete LePage と申します。Chrome 104 がリリースされ次第、Chrome の新機能についてお知らせします。