コンテンツにスキップ

057. Timeout(タイムアウト:通信の「諦め時」を賢く設定する)

原理:待ちぼうけを防ぐための時間制限

インターネットに「絶対」はない

どれほど優れたWebサービスであっても、通信が不安定な時や、サーバーが重い時は必ずあります。 そんな時、HTMXのボタンを押したまま、画面上の「くるくる(ローダー)」が永遠に回り続けていたら……ユーザーは不安になり、やがてあなたのサイトを去ってしまうでしょう。

「タイムアウト」とは、「これ以上返事が来ないなら、今回は諦めて通信を中止する」という制限時間のことです。 適切な制限時間を設けることは、ユーザーの貴重な時間を守り、ブラウザのリソース(メモリや処理能力)を無駄遣いしないための、Web開発における「誠実さ」の表れです。

HTMXでは、このタイムアウトを属性一つで、しかもミリ秒単位で精密に設定することができます。


実践:待たせすぎない、優しい設計

1. 3秒で諦める設定

通常、ブラウザのデフォルトのタイムアウトは非常に長く設定されています。これを「3秒(3000ミリ秒)」という、現代の感覚に合わせた短時間に制限する例です。

<!-- 
  hx-get: 通信を開始
  hx-request: 通信の性格設定。
              "timeout": 3000 にすることで、3秒後に自動キャンセルされます。
-->
<button hx-get="/api/heavy-data" hx-request='{"timeout": 3000}'>
    データを取得(3秒以上かかると中止)
</button>

2. タイムアウトした時のユーザーへのフォロー

「通信が止まっただけ」だとユーザーは何が起きたか分かりません。HTMXには、タイムアウトなどのエラーが起きた時に発火するイベントがあるため、これを利用してメッセージを出すのがプロの仕事です。

document.body.addEventListener('htmx:timeout', function(evt) {
    alert("通信が非常に混み合っているため、一度中断しました。再度お試しください。");
});

3. ステップ・バイ・ステップ解説

  1. 予測: その処理に通常どれくらいかかるかを想像します(例:通常の検索なら1秒、画像のアップロードなら10秒など)。
  2. 設定: hx-request='{"timeout": ミリ秒}' という形をボタンや親要素に書き込みます。
  3. 試験: 開発者ツールでネットワーク速度を「Offline」や「Slow 3G」にして、実際にタイムアウトが発生して動作が止まるかを確認します。

比較:デフォルトの挙動 vs Timeout設定

デフォルト(ブラウザ任せ)

  • 待ち時間: 30秒〜1分程度(ブラウザによって様々)。
  • ユーザー体験: フリーズしたように見え、不評。

HTMXでのTimeout設定

  • 待ち時間: あなたが指定した時間(例:2000ms)。
  • ユーザー体験: 早く結果(または諦めた旨の通知)が得られるため、リズムが保たれる。

まとめ:初心者のための「時間」の管理術

タイムアウトを設定することは、あなたのWebアプリに「潔さ」と「安定感」を与えることです。

  • ユーザーを放置しない: ネット環境が悪いユーザーにとって、タイムアウトは「もう一度やり直すチャンス」を与える機能になります。
  • サーバーの負担も守る: クライアント(ブラウザ)側で早めに諦めることは、サーバー側の無駄な処理を止めるヒントにもなり得ます。
  • 適切な時間選び: 短すぎるとエラーばかりになり、長すぎるとイライラの元。まずは「5秒(5000ms)」あたりから試してみるのがおすすめです。

いつまでも待たない。それが最高のUX(ユーザー体験)への近道です。hx-request という設定パネルの「timeout」ネジを少し回して、あなたのアプリをよりスマートに、よりタフに仕上げてください。次の記事では、通信結果を賢く使い回すための「キャッシュ制御(058. Cache Control)」について学びます。