新しいオブジェクト データを追加すると、v-for は、すでにレンダリングされているオブジェクトであっても、すべてのオブジェクトを再レンダリングするという奇妙な vuejs 効果があります。
フェイスブックのような無限スクロールを実装しています。
###コード###さて、ここで問題が…
これは私が使用するコードです
何を疑うのか新しいデータが追加されるたびに、VueJS がすべてのデータを再レンダリングし、この影響を引き起こしているのではないかと思います。すでに画面上にレンダリングされたデータを再レンダリングしないように vueJS を強制するにはどうすればよいですか?
不要な asyncIIFE が 2 つあります。
forEach
の 2 つ目は、その中の非同期コードがループ反復ごとに同時に実行されるため、特に問題があります。これには次のような影響があります。getDocs()
はループ反復ごとにすぐに起動し、サーバーにスパム送信する可能性があります (これがネットワーク リクエストを実行していると仮定します)。これはあなたの意図ですか?新しい投稿は最大 5 件までしか取得できないようなので、おそらく大丈夫でしょう。また、
var
は使用せず、代わりにconst
またはlet
を使用してください。var
を使用する正当な理由はもうほとんどありません。廃止してください。これによってパフォーマンスが大幅に向上するとは言えませんが、次の変更をお勧めします (未テスト):
リーリーテンプレートで実行
:post-content="truncateString(linkify(post.data().post_content))"
は、linkify
が再レンダリングのたびに実行されることを意味します。linkify
は長いリストでは遅いのではないかと思います。事前に投稿ごとに計算することはできますか?コンポーネントをインストールすると、ウィンドウ スクロール イベント リスナーが登録されます。コンポーネントが破棄された場合は、イベント リスナーの登録を解除する必要があります。そうしないと、ウィンドウがスクロールされるたびにイベント リスナーが起動されてしまいます。これはあなたのケースでは問題にならないかもしれませんが、再利用可能なコンポーネントの場合は必要です。