0

タイトルが示すように、jqueryの表示データの速度は純粋なphpよりも1〜2秒遅くなります。http://plekz.com/test-slow3.phpのデモ。jqueryが純粋なphpと同じくらい速くデータを表示するようにするにはどうすればよいですか?

コード:

<div id="jqryd">
</div>

<script src="javascripts/jquery-1.5.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript">
    var jqryd = $('#jqryd');
    jQuery.get("sale-show-month2.php", function(data) {
        jqryd.html(data);
    });
</script>


<?php
    $sql = "SELECT payment_date, SUM(price) FROM sale WHERE seller_id=? && Year(payment_date)=? GROUP BY Month(payment_date) DESC"; //this is loged-in user.
    $q = $conn->prepare($sql);
    $result = $q->execute(array($user_id, $selected_year));
    if(!$result){
        die("Error Select user table query : ". implode(" : ", $q->errorInfo())); //if don't use implode, output of errorInfo() will be "Array".
    }
    while($r = $q->fetch(PDO::FETCH_ASSOC)){
        $price_db2 = $r['SUM(price)'];
        $payment_date_db = $r['payment_date'];
        $payment_month_db = date("F", strtotime($payment_date_db));
        $payment_month_db2 = date("m", strtotime($payment_date_db));
        echo "This is pure php : " . $payment_month_db . " - " . $money_currency . $price_db2 ."<br>";
    }
?>
4

4 に答える 4

1

あなたのサイトの例でトラフィックを分析すると、結果以外に、sale-show-month2.phpページで jquery javascript も返すことがわかります。これにより、ページ全体の速度が大幅に低下します。何らかの理由で、ネットワーク トレーサーはhttp://plekz.com/javascripts/jquery-1.5.js?_=1337691808625、キャッシュの使用を許可しない のような呼び出しでクエリ文字列を確認します。

リンクをjqueryに戻さないようにするだけで、パフォーマンスが向上します。

その後も、jquery で読み込まれたデータが後で表示されますが、これはget、最初のページが読み込まれた後にメソッドが呼び出されるためです。Firebug または他のツール (chrome と IE には独自のものがあります) を使用すると、非常に明確に確認できます。

于 2012-05-22T13:10:10.207 に答える
0

結果を最適化する方法はいくつかありますが、あなたの質問への答えは

jquery表示データを純粋なphpと同じくらい速くする方法は?

です:無理です。

JavaScript は、解析されて準備が整うまで、DOM に何もロードできません。これは、「純粋な PHP」データがメイン ページの一部としてサーバーによって配信されるため、既に読み込まれていることを意味します。

AJAX バージョンを取得するために、ブラウザーがサーバーに対して別の要求を行う必要があり、別のラウンドトリップ時間がかかるのはそのときだけです。つまり、サーバーと JS がどれほど優れていても、AJAX バージョンがサーバー側バージョンほど高速になることはありません。

注: これは、両方のバージョンが競合するセットアップにのみ適用されます。もちろん、PHP とデータベース要求を使用せずに HTML ページの最初の配信を高速化し、後で AJAX を使用していくつかのものをロードすることは理にかなっています。

于 2012-05-22T13:39:48.960 に答える
0

あなたの質問は本当に意味がありません。firebug または chrome を使用してネットワーク転送を確認してください。どちらのシナリオでも、データの待機にほぼ同じ時間を費やしていることがわかります。ただし、php で生成されたデータを受け取った後、ページは jquery をダウンロードするのに時間がかかります。その後、新しいデータを要求できます。

唯一の注目すべき点は、jquery を使用してサーバーに接続するのに 0.5 秒かかることです。接続が悪い場合、このラグは常に存在します。サーバー側で生成されたデータでは 1 回取得しますが、ajax では 2 回取得します。

したがって、シナリオでは、サーバーを適切なスループットと適切な応答時間を持つものに切り替えない限り、フェッチを高速化することはできません。

于 2012-05-22T13:16:49.483 に答える
0

サーバーとクライアント間で転送されるデータの量に関しては、常に必要な最小限のデータを転送し (おそらくデータに応じてプレーン テキスト/XML または JSON を使用)、最も効率的な方法を使用してそれを DOM に追加します。

データがどれだけ大きくても、DOM に追加するための最良の (あなたの場合は最速の) メソッドを使用しています。この jsperf をチェックして、どのメソッドが最速であるかを確認してください。

また、組み込み DOM 作成メソッドを使用すると、常に高速であることがわかります。たとえば、

var li = document.createElement('li');
li.innerHTML = i;
li.setAttribute('title', 'Element number ' + i);
li.setAttribute('class', 'list-item');
container.appendChild(li);

したがって、あなたの場合、データを JSON として渡し、ノードをループして、必要に応じて追加します。返されたデータが多い場合は、データをページ分割するか、最初のデータを表示してから、表示するデータの次の部分を取得する「さらに表示」関数を追加します。

バックエンドに関しては、クエリが最適化され、正しいインデックスが使用されていることを確認します。

于 2012-05-22T13:05:06.017 に答える