2

データベースから9つの画像を読み込んでいますが、構文はおおよそ次のようになります。

<img src="image_loader.php?id=4"></img>

image_loader.phpの私のPHPは次のよ​​うになります。

<?php
    /* I set up my connection using mysql_connect and mysql_select_db */

    $query = sprintf("SELECT ... FROM ... WHERE id='".$_GET["id"]."'");
    $result = mysql_query($query, $con);
    mysql_close($con);

    if (!$result) {
        // no result
    }
    else {
        $row = mysql_fetch_row($result); 
        header('Content-type: image/png');
        echo $row[0];
        mysql_free_result($result);
        }
?>

各画像は約10〜13kですが、束の読み込みが非常に遅いようです。ブラウザが一度に実行できるリクエストの数にはボトルネックがあることを認識していますが、待機時間は不必要なようです。

データベースから画像をすばやくロードする方法に関する提案はありますか?

また、これはほとんど別の質問ですが、ブラウザ(またはサーバー)に.gif / .png / .jpg srcsで画像をキャッシュするように指示することは可能ですか?Firefoxはそうですが、Chromeはそうではないようですが、私にはわかりません。

ここに画像の説明を入力してください

4

1 に答える 1

1

まず、画像をデータベースに保存することが最も理にかなっているのかどうかを検討します。可能性はありますが、各画像にファイルシステムで一意のファイル名を付けてデータベースに保存する方が速い場合が多いため、真剣に検討する必要があります。

ある種のスタイルの抽象化を行う一般的なPHPスクリプトを要求するのではなく、クライアントから直接そのファイルを要求できれば、速度がさらに向上します。fopen()

遅延の原因を絞り込むには、まず、データベースがWebサーバーと同じサーバーでホストされているかどうかを確認すると役立つ場合があります。ローカルではなくリモートデータベースサーバーでホストされていることを示す1つの指標は、mysql_connect()呼び出しで提供しているホスト文字列を確認することです。 localhostそのローカルを示唆するだろうが、他の何かがそうではないことを示唆するだろう。注として、多くの共有ホストサービス(GoDaddyなど)は、データベースサーバーをWebサーバーから分割します。

image_loader.php遅延の原因をよりよく理解するために、遅延を特定するためにタイムスタンプを使用してコードをインストルメント化することをお勧めしますか?私の推測では、それはクエリに含まれるでしょう。

クエリに遅延がある場合は、クエリの数を制限する必要があります。9ではなく1つのクエリを実行できる戦略では、Webサーバーからデータベースサーバーへの遅延の影響を制限できます。

于 2012-06-06T01:11:59.567 に答える