12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DNS Prefetch - High Performance Web 2015

Last updated at Posted at 2015-06-24

DNS

HTTP のリクエストも実際は、サーバとの TCP 接続の確立が必要になる。
そのためには、ホストを DNS で名前解決しないといけない。

この DNS もチューニングが進んでいくと気になる存在になる。
特にクライアントが DNS を設定している場合は、それ自体を速くするみたいなことはしにくい。みんなが 8.8.8.8 にしているとも限らないし、Web アプリというレイヤで見ると手を入れにくい部分だった。

DNS Prefetch

最近のブラウザは、例えばページにリンクが埋め込まれていれば、そのリンクのドメインを先に解決しておいてくれる。つまり、リンクをクリックした時点では、すでに名前解決が行われている状態にできる訳だ。

ドメインの解決は、パケットが飛ぶ訳だけどそのペイロードは Web の中で言えば結構小さい部類だし、結果は TTL の間はキャッシュされるのですぐ次のページで使われなかったとしても、そこまでデメリットにはならない。

これはデフォルトで行われているので、その恩恵に授かるわけだけど、一応 opt-out もできる。

クライアント側からすればブラウザのオプションなどでオフにする。
コンテンツ側からなら、ヘッダに x-dns-prefetch-control を送る。
もしくは、 meta タグに書く。

<meta http-equiv="x-dns-prefetch-control" content="off">

ちなみにデフォルトでは HTTPS のページでは DNS-Prefetch されない。

DNS Prefetch Control

しかし、これはページに埋め込まれたものに対してしか行われない。

例えばログイン画面の次はメインページに遷移することが多いだろう。
そこでログイン画面にいる間に、ログイン画面では使わないがメインページで使うコンテンツのドメインなどを先に解決しておけると、次のページでのコンテンツ取得にも活かせる。

よく使う CDN などのドメインを投機的に解決しておくには、Link タグの API を使う。

Firefox と Chrome は少なくとも対応している模様。

<link rel="dns-prefetch" href="http://example.com/">

DNS の解決が遅いことがボトルネックになるレベルまでチューニングできているなら、考えてみると良いと思う。

link

see also

  • prebrowsing
12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?