検索

ホームページ  >  に質問  >  本文

一度に何千ものデータをフェッチするときに DOM をレンダリングするにはどうすればよいですか?

リーリー

これは、firebug によって測定された時間です。8.3 ミリ秒はグループで追加され (方法 1)、5.74 ミリ秒は直接追加されます (方法 2)

個人的には、グループ化は次のように考えています。これで dom レンダリングが減ってラグもなくなるのですが、firebug で計測した結果が私の考えと違っていて、データが小さすぎるためでしょうか?

PHP中文网PHP中文网2751日前718

全員に返信(5)返信します

  • 阿神

    阿神2017-05-19 10:34:30

    実際、グループ化では実際にプレッシャーを共有することはできません。タイマーを追加してタイムシェアリング機能を使用する必要があります。

    例は、WebQQ の QQ フレンド リストの作成です。通常、リストには数百または数千の友人が含まれており、友人がノードで表されている場合、ページ上にリストをレンダリングするときに、ページ内に一度に数百または数千のノードを作成する必要がある場合があります。

    短期間に多数の DOM ノードをページに追加すると、明らかにブラウザに負荷がかかり、
    ブラウザのアニメーションが途切れたり、一時停止したりすることがあります。コードは次のとおりです:
    リーリー この問題に対する解決策の 1 つは、次の timeChunk 関数です。timeChunk 関数を使用すると、たとえば、1 秒で 1000 個のノードを作成する代わりに、200 ミリ秒ごとに 8 個のノードを作成できます。
    リーリー
    上記は書籍「デザインパターン」からの抜粋です

    返事
    0
  • 高洛峰

    高洛峰2017-05-19 10:34:30

    あなたのソリューションが遅い理由は次のとおりです。
    $('.list').append(html);
    このコードがループするたびに、dom 要素、つまり $('.list' の位置を変更する必要があります。 )jquery .list ドキュメントを取得する必要があります。これは N 回ループして配置するのと同じです。これはもちろん非効率です。そのため、2 番目のオプションは 1 回だけ配置し、すべての要素をそれに追加します。明らかに効率的です。 . 配列のシャーディングは js にまったく反映されません。ただし、JS 自体のシャーディングの手順が 1 つ増えても効率は向上しません。分割しても効率は同じです

    返事
    0
  • 阿神

    阿神2017-05-19 10:34:30

    一度に何千ものデータを取得することは、API 設計に何か問題があることを示しています。

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:34:30

    個人的には、最初の方法はより多くのメモリと時間を消費すると思います (ボリュームが小さい場合)。まず、上記のステートメントは合計され、より多くの回数実行されます。次に、複数回追加するのは、一度に追加するよりも優れていません。

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:34:30

    一度に取得した数千のデータは、すべて一度に追加されるわけではありません。

    合理的なアプローチは、ディスプレイの重要性と二次性に応じてロードすることです。最初に表示されているものをロードし、プロセスがアイドル状態のときに残りをバッチでページに挿入します。

    返事
    0
  • キャンセル返事