-1

基本的に私がやりたいのは、表示する必要のあるデータを挿入しながら、画像の読み込みを高速化することです。画像は変更されませんが、同じコードのテキストは、表示している人物によって異なります。私のコードは25の「スキル」のセットをループし、それぞれの画像を取得して、画像と同じ行にユーザー情報を表示します。コードをより高速に実行し、画像を常にロードする必要がないように、画像をキャッシュするにはどうすればよいですか?私のコードは次のようになります。

    function compare($user1) {
    include "mysql.ws";
    $user1 = str_replace(" ", "_", $user1);
    $query = mysql_query("SELECT a.*, b.* FROM skills a JOIN activities b ON(a.playerName LIKE b.playerName) WHERE a.playerName LIKE '".fixName($user1)."' LIMIT 1") or die(mysql_error());

    $row = mysql_fetch_array($query);
    $overall['lvl'] = 0;
    $overall['xp'] = 0;
    for ($i = 1; $i <=25; $i++){
        $xptype = findType($i)."xp";  
        $overall["lvl"] += getLevelForXP($row[$xptype], $i);
        $overall["xp"] += $row[$xptype];
    }
        //updateDonator($user1);

    echo'<div class="OrnamentalBoxBg"><div class="OrnamentalBoxContent">
        <div class="header">
        <div class="left">
        <span class="columnLevel">Level</span>
        <span class="columnTotal">Total XP</span>
        <span class="columnRank">Rank</span>
        </div></div>
        <div class="row" data-skill="combat" data-member="false">
        <div class="left">
        <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table=0&amp;rank='.findRank($user1,"0").'#'.findRank($user1,"0").'">
        <span class="columnLevel">
        '.dots($overall["lvl"]).'
        </span>
        </a>
        <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table=0&amp;rank='.findRank($user1,"0").'#'.findRank($user1,"0").'">
        <span class="columnTotal">
        '.dots($overall["xp"]).'
        </span>
        </a>
        <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table=0&amp;rank='.findRank($user1,"0").'#'.findRank($user1,"0").'">
        <span class="columnRank">
        '.findRank($user1,"0").'
        </span>
        </a>
        </div>
        <div class="middle">
        <img src="http://sage-scape.com/hiscores/img/overall.png?2" alt="" title="">
        <span class="statName"><span><span><span>Overall</span></span></span></span>
        </div>
        </div>
    ';
    for ($i = 1; $i <=25; $i++){
        $xptype = findType($i)."xp";  
        if($i == 25){
            echo'
                <div class="row last-row" data-skill="'.findSkill($i).'" data-member="'.member($i).'"> ';

        } else {
            echo'
                <div class="row" data-skill="'.findSkill($i).'" data-member="'.member($i).'"> ';
        }
        if($row[$xptype] > 1)
        echo'
            <div class="left">
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnLevel">
                    '.getLevelForXP($row[$xptype],"$i").'
                    </span>
            </a>
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnTotal">
            '.dots($row["$xptype"],"$i").'
            </span>
            </a>
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnRank">
            '.findRank($user1,"$i").'
            </span>
            </a>
            </div>
            <div class="middle">
            <img src="http://sage-scape.com/hiscores/img/xp_'.fixName(findType($i)).'_total.png?2" alt="" title="" />
            <span class="statName"><span><span><span>'.findType($i).'</span></span></span></span>
            </div>
            </div>
        ';
        else
        echo'
            <div class="left">
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnLevel">
                    --
                    </span>
            </a>
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnTotal">
            --
            </span>
            </a>
            <a href="http://sage-scape.com/hiscores/overall.ws?category_type=0&amp;table='.$i.'&amp;rank='.findRank($user1,"$i").'#'.findRank($user1,"$i").'">
            <span class="columnRank">
            --
            </span>
            </a>
            </div>
            <div class="middle">
            <img src="http://sage-scape.com/hiscores/img/xp_'.fixName(findType($i)).'_total.png?2" alt="" title="" />
            <span class="statName"><span><span><span>'.findType($i).'</span></span></span></span>
            </div>
            </div>
        ';
    }
    echo'
    </div></div>
<div class="OrnamentalBoxBottom"></div>
</div>
<div class="OrnamentalBox Width923 SegmentTwo" id="activityStats">
<div class="OrnamentalBoxTop"></div>
<div class="OrnamentalBoxTitle"><div class="Centre1"><div class="Centre2">
<h3 class="Gradient NoFlourish Centre"><span class="spacing" aria-hidden="true">Activity Stats</span>
<span class="G0">Activity Stats</span>
<span class="G1" aria-hidden="true">Activity Stats</span>
<span class="G2" aria-hidden="true">Activity Stats</span>
<span class="G3" aria-hidden="true">Activity Stats</span>
<span class="G4" aria-hidden="true">Activity Stats</span>
<span class="G5" aria-hidden="true">Activity Stats</span>
<span class="G6" aria-hidden="true">Activity Stats</span>
</h3></div></div></div>
<div class="FlatHeader playerNames">
<div class="left">
'.BBCode($user1).'</div>
</div>
<div class="playerAvatars">
<div class="left">
<img src="http://services.runescape.com/m=avatar-rs/'.$user1.'/chat.png?cachebust=1342804665991" alt="" title="">
</div>
</div>
<div class="OrnamentalBoxBg"><div class="OrnamentalBoxContent">
<div class="header">
<div class="left">
<span class="columnScore">Score</span>
<span class="columnRank">Rank</span>
</div>
</div>';
    for ($i = 0; $i < 7; $i++){
        $xptype = findActivityP($i);  
        if($i == 6){
            echo'
                <div class="row last-row">';
        } else {
            echo'
                <div class="row">';
        }
        echo'
        <div class="left">
        <a href="http://sage-scape.com/hiscores/overall.ws?category_type=1&amp;table='.$i.'&amp;rank='.findARank($user1,"$i").'#'.findARank($user1,"$i").'">
        <span class="columnScore">
        '.$row["$xptype"].'
        </span>
        </a>
        <a href="http://sage-scape.com/hiscores/overall.ws?category_type=1&amp;table='.$i.'&amp;rank='.findARank($user1,"$i").'#'.findARank($user1,"$i").'">
        <span class="columnRank">
        '.findARank($user1,"$i").'
        </span>
        </a>
        </div>
        <div class="middle">
        <img src="http://sage-scape.com/hiscores/img/'.findActivityP($i).'.png" alt="" title="">
        <span class="statName"><span><span><span>'.findActivity($i).'</span></span></span></span>
        </div>
        </div>
        ';
    }
}

これを正しく行う方法はありますか?これを実現できる可能性のあるMySQLデータベースがありますが、その方法がわかりません。誰かが私にそれを行う方法を教えてもらえますか?

4

2 に答える 2

2

キャッシュの実際のメカニズムに関しては、ブラウザやサーバーの組み込みツールに勝るものはありません。これらのメカニズムを最適化するために、いくつかのことを行うことができます。

Yahoo! によるこの素晴らしい記事には、多くの優れたテクニックが詳しく説明されています。ベスト プラクティスについて。要約する:

  • 画像に長い Expires ヘッダーを使用する (安価で効果的)
  • 画像スプライトと画像マップを使用する
  • インライン イメージ (多くの場合、base64 インライン イメージと呼ばれます)
  • CDN(コンテンツ配信ネットワーク)を利用する
  • CSS と JavaScript を縮小する
  • gzip コンテンツ (圧縮)
  • スクリプトを下に、CSS を上に配置します。

最も効果的で普遍的に安価で効果的な最適化の 1 つは、これらの画像を 1 つの CSS スプライトに変換することでした。これには、訪問者ごとに 1 つのキャッシュ可能なダウンロードが必要です。

CSS スプライトは非常に単純です。css-tricks でそれらを達成する方法に関する素晴らしい記事と、 A List Apart に関する別の記事があります。

基本的に、画像を 1 つのタイル画像に結合します。スプライトのインスピレーションは古いコンソール ゲームから来ているので、私の例でそれらに敬意を表します。

ここに画像の説明を入力

次に、画像を「クリップ」して、必要な各画像の領域のみを表示します。

div.sprite { background-image:url('assets/sprites/avatars.gif')}
div.sprite.purple_druid {background-position: -75px 0px }
div.sprite.king {background-position: -150px -150px}

このようなものを用意したら、PHP と MySQL で解決できることはあまりないと思います。率直に言って、静的コンテンツである 25 枚の画像しかない場合に最適化する場所は間違っていると思います。

キャッシングに関するもう 1 つの重要な考慮事項は、本当に最適化する必要があるかどうかです。ハイエンド サーバーは、最適化に費やされる開発時間よりも実用的ですか? サイトは実際に遅いですか?コンテンツ配信ネットワークは、安価な見返りのために物事をスピードアップできますか?

これがいくつか役立つことを願っています。

于 2012-12-06T04:24:33.463 に答える
0

あなたの質問を理解しているように、毎回画像をロードしたくないので、ブラウザにキャッシュする必要があるため、これを実現する?2には、画像名の後に削除する必要があります

src="http://sage-scape.com/hiscores/img/xp_'.fixName(findType($i)).'_total.png?2
                                                                              ^

2このブラウザは画像をキャッシュせず、同じ画像を何度もロードしないため、画像名の後に引数として渡しています。したがって、削除する?2と、ブラウザに画像がキャッシュされます。

于 2012-12-06T04:23:59.313 に答える