IT-Q

Suspense で包めば速くなる、という理解で合っていますか。

半分違います。遅いデータ取得自体は速くなりませんし、総時間もほとんど変わりません。変わるのは何が先に見えるかです。体感を変える手段であって、短縮する手段ではありません。

面接官が見ているのはストリーミングは総時間を縮めないと理解しているか。ここを誤解している人は多い。

これは「ページの隅にログインユーザー名を出したいだけです。そのために全体を動的にするのは避けたい。どうしますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • 総処理時間は変わらない。変わるのは何が先に見えるか
    正確です。だから「なぜ遅いのか」に戻る必要があります。
  • 合っている。並行に処理されるので全体も速くなる
    並行化と混ざっています。Suspense は表示の区切りであって、処理を並行にする仕組みではありません。独立した取得を並行に走らせるのは、また別の対処です。
  • 合っている。サーバーの負荷が下がるため
    下がりません。やる仕事の総量は同じで、返す順番が変わるだけです。
  • 半分合っている。体感は良くなるが、遅い処理自体は別途直す必要がある
    この整理ができていれば十分です。隠すことと直すことを分けて話せています。

面接官は何を見ているか

  • 総処理時間は変わらない、と正しく言えた
  • 変わるのは「何が先に見えるか」だと説明できた
  • 遅い処理そのものは別途直す必要があると繋げられた

模範解答

半分合っていて、半分違います。

Suspense で分けても、遅いデータ取得が速くなるわけではありません。全部揃うまでの総時間はほとんど変わりません。変わるのは「何が先に見えるか」です。遅い部分を待つ間に、それ以外を表示できるようになります。

だから効くのは体感速度と、指標でいえば最初に何かが表示されるまでの時間です。逆に、ページ全体が1つの遅いクエリに依存している場合は、Suspense をいくら入れても見えるものがないので効きません。

面談で差が出るのは、ここで「そもそもその処理がなぜ遅いのか」に戻れるかどうかです。ストリーミングは遅さを隠す手段であって、直す手段ではありません。隠したまま放置すると、データ量が増えたときに結局破綻します。