2

ゴール

ブラウザと同じように、HTMLドキュメントへのリクエストでシミュレートしたいと思います。つまり、メインのHTMLファイルだけでなく、CSS、JS、画像などのリンクされたものもダウンロードしたいということです。

今のところ、最初のHTMLドキュメントのみを解析したいと思います。つまり、CSS(background-images、web-fonts)やJavaScript(Ajax)などの解析の結果として生じるリクエストは考慮されていません。

これを実装するには、ブラウザがWebサイトを正確に処理する方法を知る必要があります。私はそれについての良い参考文献を見つけていません。それに関するどんな助けも大いに感謝され、おそらく私の問題を解決するでしょう。

予測

適切な参照がなかったため、プロセス(リダイレクト、レンダリングなどを考慮しない)は次のように機能すると想定しました。

  1. 持続的HTTP接続はwww.facebook.com
  2. パス「/」が要求され、HTMLが受信されます
  3. ドキュメントが完全に(?)受信されると、ドキュメントが解析され、要求する必要のあるURLのリストが入力されます(頭と体のオブジェクトに分割されますか?!)
  4. 最初のURLはヘッドリストから取得され、そのホストとの永続的なHTTP接続が確立されているかどうかがチェックされます
    • ない場合は、それが確立され、その後、オブジェクトが要求されます
    • ある場合は、接続の「ダウンロードキュー」に追加されます
  5. リストが空になるまでステップ4を繰り返します
  6. 次に、「ボディリスト」に対して手順4〜5が繰り返されます。

これはブラウザの動作にさえ近いですか?

ボーナスの質問:ヘッダー内のJavaScriptファイルとCSSファイルの順序に違いはありますか?

疑い

確認するために、Chromeデベロッパーツール(Chrome 18)を使用していくつかのテストを実施しました。www.facebook.com各オブジェクトがロードされたときの測定に接続しました。Ctrl+を使用してリロードするとR、結果は次のようになります。

www.facebook.comへのリクエストについては、Chrome-Developer-Network-Tabに出力してください

私が最も困惑しているのは、同じホストからの場合でも、ほとんどのリクエストが他のリクエストと同時に実行されることです(static.ak.fbcdn.net)。ブラウザでパイプラインが無効になっているのに(デフォルト設定)、リクエストが同時に発生しているように見えるのはなぜですか?

4

1 に答える 1

2

ブラウザは、ダウンロード(リソースの並列ダウンロード)を高速化するために、複数の接続を使用します。ただし、同じホストへの接続数が制限されます。これが、コンテンツ配信ネットワークが存在する理由の1つです。

スクリプトは並列ダウンロードをブロックするため、ヘッダー内のCSSファイルとスクリプトファイルの順序は重要です(スクリプトが延期されない場合を除く)。

また、ブラウザはHTMLを受信して​​いる間に解析します(これも処理を高速化するためです)。これが、まだロードされていないDOM要素を操作しようとするスクリプトをヘッドに配置した場合にエラーが発生する理由です。

ただし、これはすべてブラウザの実装の詳細であり、タスクにとって重要ではない場合があります。最良-ヘッドレスブラウザのソースコードを見て、何が起こっているのかを見つけてください。

于 2012-05-20T22:12:14.520 に答える