iOS Safari の Preload Top Hit 機能
Preload Top Hit 機能とは
iOS Safari は Preload Top Hit
という機能がデフォルトで有効になっています。
トップヒットと言うのは、URL入力欄に文字を入力している時、以前アクセスしたことのあるウェブサイトから候補を挙げてくれる機能です。
Preload Top Hit
機能が有効になっていると、このトップヒットがサジェストされた瞬間に、該当のウェブサイトにGETリクエストが発生します。
これからアクセスするであろうウェブサイトを予測し、ロードしておくことでユーザー体験を向上しようということでしょう。
利用者にとっては一長一短
しかしこの Preload Top Hit
機能は、ご丁寧に(恐らく全ての)リソースのダウンロードを発生させます。
ユーザーは体感的にブラウジング速度が向上しているように感じるかもしれませんが、あくまで予測なので無駄な通信が発生しかねないとも言えます。
もし通信量が気になっている、あるいはSafariが重いと感じている方は、設定をOFFにしたほうがいいかもしれません。
具体的な挙動例
一文字入力するごとに履歴から候補が選ばれ、通信が発生します。
-
http://
まで入力-
http://www.google.com/
に通信が発生
-
-
http://www.y
まで入力-
http://www.yahoo.co.jp/
に通信が発生
-
-
http://www.yo
まで入力-
http://www.youtube.com/
に通信が発生
-
-
http://www.yod
まで入力-
http://www.yodobashi.com/
に通信が発生
-
- ...
JavaScript が実行される
なんとこの機能、JavaScript の実行まで行っているようです。
即時実行で XHR 通信する JavaScript を配置した所、サーバーへリクエストが発生しました。
さらにトップヒット候補が変化すると pagehide
イベントが発火しました。
こちらも pagehide
のイベントハンドラでXHR通信するコードを配置した所、サーバーへリクエストが発生しました。
(ちなみに window.alert()
を配置してみましたが、こちらは実行されませんでした。)
何が問題となるか
実際にはユーザーはページを見ていないにも関わらず、サーバーへは普通のリクエストが発生します。
利用者にとっては上述のように意図しない通信が生じる点が問題になりえますが、どちらかと言うとサイト管理者にデメリットが有り、ページのアクセス解析を行っていたり、広告のインプレッション数などを計測している場合、ノイズになっている可能性が考えられます。
通信を見た限りでは、このプリロードは通常のアクセスと識別することが出来なさそうなので、判定は諦めるしかなさそうです。(強いて頑張るならばスクロールやタップ操作のイベント監視などすれば不可能ではなさそうですが・・・)
URLを手動入力するという機会は、お気に入りやリンクによってブラウジングする回数よりは恐らく少ないでしょうから大問題にはならないかと思いますが、こういったノイズが発生しうるという点は留意しておいたほうが良さそうです。
Author And Source
この問題について(iOS Safari の Preload Top Hit 機能), 我々は、より多くの情報をここで見つけました https://qiita.com/nanocloudx/items/27f53a8d50755490b6e5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .