В современной веб-интерфейсной разработке оптимизация производительности всегда была важной темой. Особенно когда объем данных велик, производительность рендеринга страницы напрямую влияет на взаимодействие с пользователем. Использование технологии виртуальной прокрутки может эффективно решить проблемы с производительностью рендеринга при больших объемах данных. Эта статья даст вам более глубокое понимание применения виртуальной прокрутки и поможет оптимизировать производительность рендеринга страниц в проектах Vue.
Виртуальная прокрутка — это эффективная технология рендеринга, используемая в основном для обработки длинных списков или таблиц с большими объемами данных. Основной принцип — визуализировать только элементы, видимые в текущем окне просмотра, сохраняя при этом заполнители только для невидимых частей. Этот метод значительно уменьшает количество узлов DOM, тем самым улучшая производительность рендеринга и плавность прокрутки.
Ядро виртуальной прокрутки состоит из следующих четырех пунктов:
Я получил запрос, то есть страница должна отображать карты траекторий поведения нескольких людей. Это число относительно велико, их могут быть тысячи. Из-за ограничений серверной части его нельзя превратить в пейджинг. можно превратить только в очень большое число. Длинный прокручиваемый список. Если данных мало, однократный рендеринг подойдет. Если данных слишком много, работа страницы неизбежно будет тормозиться, что приведет к значительному снижению производительности страницы. Выбор виртуальной прокрутки может очень хорошо решить эту проблему.
Поскольку это проект Vue, я рекомендую очень полезную стороннюю библиотеку: vue-virtual-scroller.
На GitHub вы можете увидеть инструкции для Vue2 или Vue3.
Вот введение в использование Vue2:
npm install vue-virtual-scroller
import { RecycleScroller } from 'vue-virtual-scroller' // плагин виртуальной прокрутки
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
Vue.component('RecycleScroller', RecycleScroller)
Здесь я используюRecycleScroller
,Подходит для ситуаций, когда размер каждого элемента в списке фиксирован. Если высота каждого из ваших предметов не фиксирована,ты можешь использоватьDynamicScroller
иDynamicScrollerItem
Чтобы добиться виртуальной прокрутки。
часть шаблона
<div class="table-box">
<RecycleScroller class="scroller" :items="pointsData" :item-size="80" key-field="name" v-slot="{ item }">
<div class="scroller-item">
<img src="/avatar2.jpg" alt="" />
<div class="scroller-item-content">
<div>{{ item.name }}</div>
<div>серийный номер:{{ item.equipmentCoding }}</div>
</div>
<div class="scroller-item-btn" @click="viewingTrajectories(item)">Посмотреть трек</div>
</div>
</RecycleScroller>
</div>
CSS-часть:
.table-box {
display: flex;
gap: 10px;
height: 400px;
.scroller {
width: 100%;
height: 100%;
.scroller-item {
display: flex;
justify-content: space-between;
align-items: center;
height: 70px;
padding: 10px 16px;
margin-bottom: 10px;
border-radius: 15px;
background: linear-gradient(180deg, #dee9ff 0%, #ffffff 100%);
box-shadow: 1px 1px 6px 0px rgba(163, 190, 244, 0.67);
border-radius: 4px 4px 4px 4px;
border: 1px solid #fff;
border-image: linear-gradient(180deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)) 1 1;
&:nth-last-child(1){
margin-bottom: 0;
}
> img {
width: 40px;
height: 40px;
border-radius: 100px;
}
> .scroller-item-content {
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
gap: 4px;
font-size: 14px;
margin-left: 16px;
> div:nth-child(1) {
font-weight: 500;
color: #1d2129;
}
> div:nth-child(n + 2) {
font-weight: 400;
color: #86909c;
}
}
> .scroller-item-btn {
cursor: pointer;
user-select: none;
margin-left: auto;
margin-top: auto;
padding: 5px 16px;
border-radius: 20px;
border: 1px solid #0a57fe;
font-weight: 400;
font-size: 14px;
color: #0a57fe;
}
}
}
}
Здесь нужно обратить внимание,Если вы хотите иметь пространство между дочерними элементами,я установилitem-size="80"
,Установить одновременно.scroller-item
этотclass Высота стиля для 70px,и установи егоmargin-bottom:10px;
,Настройки последнего элемента margin-bottom: 0
。
Видно, что будь то колесо мыши или перетаскивание ползунка прокрутки, эффект прокрутки может быть очень плавным.
Внедряя технологию виртуальной прокрутки, мы можем значительно улучшить производительность рендеринга и удобство прокрутки больших списков данных. Виртуальная прокрутка сокращает операции DOM и использование памяти за счет рендеринга содержимого только в видимой области и решает проблему «узких мест» в производительности, вызванную традиционным рендерингом больших данных. В настоящее время большинство компонентов инфраструктуры пользовательского интерфейса, связанных с Vue3, поддерживают виртуальную прокрутку и могут использоваться напрямую. Однако существует относительно немного виртуальной прокрутки, связанной со старыми проектами Vue2. Некоторые бизнес-сценарии, например, выбор из раскрывающегося списка, может потребоваться реализовать вручную. коробки, столы и т. д. . Позже я углублюсь в эту тему и буду использовать технологию виртуальной прокрутки для преобразования существующих компонентов. Надеюсь, эта статья может быть вам полезна.