2

まず、ちょっとした背景情報:

1999 年頃の HTTP 1.1 仕様では、ブラウザーとサーバーが同じホスト名への並列要求を 2 つに制限することを推奨しています。(もっと)

その記事を読み続けると、著者は、複数のサブドメインをすべて同じものに向けさせることで、ブラウザを「欺く」ことを提案しています。

2 つの別個のサブドメイン (2 つの異なるホスト名) から画像を提供する場合、ブラウザーは最大 4 つの画像を並行してダウンロードします (ホスト名ごとに 2 つ)。

そのため、次のように、2 つのサブドメイン間でリクエストを均等に分散して、ページのダウンロード速度を最適化できます。

<img src="http://subdomain1.example.com/img1.jpg" />
<img src="http://subdomain2.example.com/img2.jpg" />
<img src="http://subdomain1.example.com/img3.jpg" />
<img src="http://subdomain2.example.com/img4.jpg" />

これには、適切なファイルを手動で調べて、各画像の「src」を変更する必要があります。


HTML に目に見える変更を加えない、はるかにシンプルで再利用可能なソリューションを探しています。

考えがある:

  1. [example.com] 上のすべての画像のような URL は、(.htaccess 経由で) [example.com/imghandler.php] にリダイレクトされます。
  2. imghandler.php は subdomain1 または subdomain2 のいずれかにリダイレクトします - ランダムに選択されます。

説明する:

# Request from browser:
>> http://example.com/dir/image.jpg

# Rewritten to:
>> http://example.com/imghandler.php?location=%2Fdir%2Fimage.jpg

# *Redirects* to either:
    1:
        >> http://subdomain1.example.com/dir/image.jpg
           (this is where the browser ends up getting the image from)
    2:
        >> http://subdomain2.example.com/dir/image.jpg
           (this is where the browser ends up getting the image from)

2 つの質問があります。

  1. 理論的な観点から、これは機能しますか?
  2. 私が望むものを達成するためのより良い方法はありますか?
4

3 に答える 3

5

このような戦略で心に留めておくべきことの 1 つは、同じファイルに対する要求を同じサーバーに送信することです。次のようなリクエストをしてもあまり効果がありません。

http://subdomain1.example.com/img1.jpg
http://subdomain2.example.com/img2.jpg
http://subdomain1.example.com/img3.jpg
http://subdomain2.example.com/img4.jpg

1ページで:

http://subdomain2.example.com/img1.jpg
http://subdomain1.example.com/img2.jpg
http://subdomain2.example.com/img3.jpg
http://subdomain1.example.com/img4.jpg

次で。

ここで使用するトリックは、ファイル名 (C# では GetHashCode) をハッシュし、それを使用してバケットを選択することです。

var serverNumber = image.GetHashCode() % serverCount;

これにより、同じ画像に対するそれ以降のリクエストが、別のサーバーではなくブラウザのキャッシュから提供されることが保証されます。

于 2009-06-13T00:20:42.797 に答える
0

画像ごとに 2 つのリクエストを行うよりも、すべての画像を 1 つのサーバーに配置する方がよいでしょう。

動的なページ コンテンツがある場合 (つまり、php を使用しているように見える場合)、同じようなことを行う関数を作成することで、同じ効果を得ることができ、サブドメインを html で直接エンコードできます。画像タグは次のようになります。

<img src="<?php echo image_root(); ?>/dir/image.jpg">

まともなエディタと正規表現の検索と置換を使用して、この種の変更をサイトにグローバルに適用できるはずです。

于 2009-06-12T23:49:11.530 に答える