0

ここでjquery noob。

プロとjqueryの経験がある人に質問があります。このスクリプトを作成しましたが、より効率的にするのに苦労しています。とにかく、PHP を介して MYSQL データベースから取得した HTML ページに複数のエントリがあるという考えです。

そう、

A - A2

B - B2

C - C2

いいえ、A、B、C は静的です。データベースから読み取られているだけです。そして、A2、B2、C2 は 10 秒ごとに更新される動的要素です。現在のフォームでは、エントリごとに複数の JavaScript のコピーがあり、これは非常に非効率的です。約 100 エントリで、CPU 使用率が 20 ~ 40% に急上昇します。

スクリプトは以下のとおりです。

<script>
$(function() { 
var refreshId = setInterval(function()
{
$('#UpdateDiv<?php echo $entry; ?>').load('live.php?entry=<?php echo $entry; ?>').fadeIn("slow");
 }, 10000);
});
</script>
<?PHP
echo '<div id="UpdateDiv'.$entry.'"></div>';
?>

ありがとうございました!

4

2 に答える 2

1

問題は、各 div 要素に独自のスクリプトがあるため、独自のリクエストを送信することです。

基本的に、10 秒ごとに 100 件のリクエストを行っています。

代わりに、新しいデータを 10 秒ごとに (おそらく json 形式で) ロードする単一のスクリプトが必要です。これにより、各 div のコンテンツが変更されます。

これを行うには、json 配列の各要素を反復処理し、(疑似コード) を設定します。

for each i
  div[i].innerHTML(jsonarray[i])

ここで、div[i] は各 div を表す jquery オブジェクトです。


すべてのエントリのデータをロードするには、次の名前の php ページを使用して新しいページを作成する必要があります (たとえば)

live.json

各 div コンテンツを json 配列 ["content1","content2"] に入れます

PHP ページの名前に .json サフィックスがない場合は、ajax 呼び出し (ajax jquery 関数を使用できます - http://api.jquery.com/jQuery.ajax/ ) を設定する必要があります。 .json ファイルとして解釈します。

次に、応答が成功したときのコールバックを設定し、その for ループを使用して各 div 要素にコンテンツを配置します。

于 2012-08-19T00:17:31.567 に答える
0

あなたの問題は、リクエストを個別に行うことです。すべてのリクエストを約 10 秒ごとに 1 つのリクエストにまとめることで、ページの効率が大幅に向上します。

すべてのエントリを一度に要求して表示する JavaScript:

var get_entries = function () {
    $.ajax({
        post: true,
        url: "entries.php",
        data: {
            entries: [1, 2, 3, 4, 5, 6, 7, 8]
        },
        success: function (response) {
            var entry_updates = JSON.parse(response);

            for (var entry in entry_updates) {
                $("#UpdateDiv" + entry).html(entry_updates[ entry ]);
            }
        }
    });
};

setInterval(get_entries, 10000);

そして、すべてのエントリを一度に処理するための PHP:

<?php

$entry_updates = array();

if (isset($_POST['entries'])) {
    foreach ($_POST['entries'] as $entry) {
        $entry_updates[ $entry ] = func_get_entry_info($entry);
    }
}

echo json_encode($entry_updates);
于 2012-08-19T00:45:10.923 に答える