Vue Academy · レッスン

大規模リストの仮想スクロール

vue-virtual-scroller、RecycleScroller、固定アイテム高と可変アイテム高のレンダリング

レッスン 3/413 ステップ

「大規模リストの仮想スクロール」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

大規模なリストの問題

何千もの DOM ノードをレンダリングすると、処理が遅くなり、多くのメモリを消費します。仮想スクロールでは、ビューポートに現在表示されている項目だけをレンダリングし、スクロールに合わせて DOM ノードを再利用します。

vue-virtual-scroller のインストール

人気のあるライブラリに vue-virtual-scroller があります。インストールして、そのスタイルをインポートします。

npm install vue-virtual-scroller

コンポーネントの登録

RecycleScroller とその CSS をインポートしてから、コンポーネント内で使用します。

import { RecycleScroller } from "vue-virtual-scroller";
import "vue-virtual-scroller/dist/vue-virtual-scroller.css";

items Prop

RecycleScroller には、items prop を通じてデータ配列全体を渡します。すべての項目を一度にレンダリングすることはなく、表示範囲内の項目だけをレンダリングします。

<RecycleScroller :items="rows" />

item-size Prop

item-size は、各行のピクセル単位の高さをスクローラーに伝えます。サイズが固定されていれば、表示範囲とスクロール全体の高さをすぐに計算できます。

<RecycleScroller
  :items="rows"
  :item-size="48"
/>

key-field Prop

key-field を使って各項目に安定した識別情報を与えると、再利用されたノードをデータに正しく対応付けられます。

<RecycleScroller
  :items="rows"
  :item-size="48"
  key-field="id"
/>

v-slot のアイテムテンプレート

デフォルトのスコープ付きスロットを使って、表示されている各項目をレンダリングします。スロットから現在の item が提供されます。

<RecycleScroller :items="rows" :item-size="48" key-field="id">
  <template v-slot="{ item }">
    <div class="row">{{ item.name }}</div>
  </template>
</RecycleScroller>

表示されている項目だけをレンダリングする

スクロールすると、スクローラーはビューポートに入る項目をマウントし、そこから出る項目をアンマウントします。リストがどれだけ長くても、DOM ノード数は少ないまま維持されます。

項目の高さが固定の場合と可変の場合

位置を単純な算術計算で求められるため、高さが固定されている場合が最も高速です。行の高さが異なる場合は、別の方法が必要です。

可変の高さへの対応

高さが可変の場合は、DynamicScroller と DynamicScrollerItem を使います。これらはレンダリングされた項目のサイズを測定し、位置を調整します。

import { DynamicScroller, DynamicScrollerItem } from "vue-virtual-scroller";

<DynamicScroller :items="rows" :min-item-size="40" key-field="id">
  <template v-slot="{ item, active }">
    <DynamicScrollerItem :item="item" :active="active">
      <div>{{ item.text }}</div>
    </DynamicScrollerItem>
  </template>
</DynamicScroller>

トレードオフ

仮想スクロールを使うと、ページ内検索(Ctrl+F)、画面外の項目へのアンカーリンク、アクセシビリティなどの機能が複雑になります。リストが本当に大規模な場合にだけ使用してください。

クイックチェック

RecycleScroller は実際には何を DOM にレンダリングしますか?

まとめ

vue-virtual-scroller の RecycleScroller を使った仮想スクロールでは、表示されている項目だけをレンダリングします。items でデータを渡し、item-size と key-field を設定して、v-slot テンプレート内で各行をレンダリングします。高速化には高さを固定し、高さが可変の場合は DynamicScroller を使います。この手法は、本当に大規模なリストに限定して使用してください。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
42
レッスン
156

よくある質問

「大規模リストの仮想スクロール」レッスンは無料ですか?

はい。「大規模リストの仮想スクロール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「大規模リストの仮想スクロール」で何を学びますか?

vue-virtual-scroller、RecycleScroller、固定アイテム高と可変アイテム高のレンダリング ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「大規模リストの仮想スクロール」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. テンプレートメモ化のためのv-memo
  2. Vue DevToolsのPerformanceタブでプロファイリング
  3. 大規模リストの仮想スクロール
  4. VueでのWeb Worker
← Vue Academyに戻る