2

私の質問は、非表示ページを処理する最良の方法は何ですか?

$('.results').slice('//hidden pages').hide();
$('.results').slice('//current page').show();

<?php
while ($row = mysql_fetch_assoc($query)) {
   echo '<span class="results">' . $row['items'] . "</span><br/>";
}
?>

現在$.hide()、クエリが数千行のデータ (正確には約 9000 行) を返すまで、問題なく動作するものを使用しています。クエリの結果が多すぎると、Firefox が遅れたりクラッシュしたりするようです。hide/showこれについての間違った方法はありますか?私はJqueryを見てきましたが、$.detachそれがこの問題を解決するかどうかはわかりません.

これは、代わりに PHP で処理する必要がありますか?

4

3 に答える 3

1

クライアント側はそれだけしか処理できません。例を見たい場合は、10,000,000 バイトの文字 a を処理してみてください (実際にこれを実行することはお勧めしません):

    var a = "a";
    var z = 100000000;
    for (var i = 0; i < z; i++) {
        a += "a";
    }

通常、ページネーションで行われることは、現在のページがオンデマンドで読み込まれることです。その後、再生されていないページが解放されます。

ページのナビゲーションに ajax イベントを追加することをお勧めします。

<div id="myTag"></div>
<div class="PageNumbers" data-page-number="1">1</div>
<script type="text/javascript">
              $(".PageNumbers").click(function () {
                 $.ajax({
                    url: "/Page/",
                    type: 'GET',
                    data: { page: $(this).attr("data-page-number")},
                    success: function (result) {
                        $("#myTag").html(result);
                     }
                });
              });
</script>

さらに、保持が望まれるページの最大の部分は画像です。それらが検出されたときに配列に格納すると、「発見された」コンテンツのリロードを大幅に減らすことができます。

于 2012-05-17T00:36:25.283 に答える
1

遅い主な理由は、9000 xn DOM 要素を操作しているためです。

これを回避する 1 つの方法は、結果を JavaScript 配列に格納し、現在のページのアイテムのみをレンダリングすることです。

これは実行可能ですが、jQuery ではやや面倒です。ノックアウトなどの他の JavaScript ライブラリを使用すると、はるかに簡単に実行できます。

ノックアウトを使用したサンプル実装は次のとおりです: http://jsfiddle.net/6bgCX/7/

編集:サンプルコードを追加

于 2012-05-17T00:49:05.417 に答える
1

AJAX を使用して値を動的にロードしないのはなぜですか? あなたが選択したアプローチは、DOM で生成されるノードが多すぎて Firefox がクラッシュするため、メモリを消費しすぎていると思います。

于 2012-05-17T00:29:07.947 に答える