-1

Ajax応答から動的に画像を取得するための大きなデータベースがあります。どうすればそれを超高速にすることができますか

画像は、次のようなカンマ区切り形式です

img4.jpg、img3.jpg、img5.jpg、img7.jpg、img11.jpg、img1.jpg、img2.jpg、img3.jpg、img6.jpg、img8.jpg

phpの私のコード。

function childImgsGrid(){

        $parentImgId = $_POST['parentImgId'];

        $query = mysql_query("select child_imgs_id,child_imgs from parent where parent_img_id = $parentImgId") 
                or die(mysql_error());

        $result = mysql_fetch_array($query);
        $arrayOfImages = explode(",", $result['child_imgs']);
        $i=1;
        foreach($arrayOfImages as $nameOfImage){

            echo "<li><a href='#lookbook' ><div class='view'><img src='images/slide/".$nameOfImage."'></a></li>";

        }
    }

とAjaxの場合

var parentImgId = $anchor.attr("id");

                var dataString = 'queryString=childImgsGrid'+'&parentImgId='+parentImgId; 

                var arrayOfImages = new Array();

                $glob.ajax({
                    type: "POST",
                    url: "ajaxtemplate.php",
                    data: dataString,                   
                    cache: false,
                    success: function(response) {
                        $glob('#grid').html(response);
                    }
                });
4

1 に答える 1

1

これは一般的に非常に幅広いトピックですが、私はこの問題に少し光を当てようとします。

  1. 画像の最適化されたバージョン

    Facebookのように、画像が追加されると、バックグラウンドジョブを使用して低品質バージョンの画像を作成できます。画像がリクエストされると、この低品質の画像が表示され、元の高品質の画像が背景に読み込まれます。ロードが完了したら、交換するだけです。

  2. プリロード

    どの画像を表示する必要があるかを知っているか、知っている場合(ギャラリーで次の2つまたは3つの画像をプリロードする一般的なケース)、ユーザー入力なしでそれらを取得できます。したがって、ユーザーが画像#443を開くと、バックグラウンドで#444、#445とともに画像が読み込まれます。

  3. インメモリストアの使用

    データベースレコードが非常に大きく、DB内のblobとしてではなくファイルシステムに画像を保存していると仮定し、取得が一意のキー(プライマリまたはその他)に基づいている場合は、memcacheやredisなどを実装してクエリを実行できます。非常に高速です。

  4. Node.js

    画像のリクエスト数が非常に多くなっている場合は、node.jsのような非同期サーバー応答アーキテクチャの使用を検討してください。

特定のユースケースとテクノロジーによって、上記のそれぞれの実装が変更されますが、全体的な概念はしっかりしている必要があります。

于 2012-11-24T09:23:49.237 に答える