vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3后端接口返回十万条数据

Vue3应对后端接口返回十万条数据的解决方案

作者:编程随想_Code

在前端开发中,我们有时会遇到后端接口直接返回 十万条数据 的情况,很多初学者会直接把数据全部 v-for 渲染到页面上,结果浏览器瞬间卡死甚至崩溃,本文将从问题原因出发,逐步给出几种常见解决方案,需要的朋友可以参考下

引言

在前端开发中,我们有时会遇到后端接口直接返回 十万条数据 的情况。很多初学者会直接把数据全部 v-for 渲染到页面上,结果浏览器瞬间卡死甚至崩溃。

那么 Vue3 应该如何优雅地处理这种场景呢?本文将从问题原因出发,逐步给出几种常见解决方案,并附带核心代码示例。

一、为什么渲染十万条会卡死?

浏览器的瓶颈并不是 JavaScript 运算,而是 DOM 渲染

所以,解决问题的核心就是:不要一次性渲染十万条 DOM

二、常见解决方案

1. 分页加载(推荐)

后端接口分页返回,例如:

优点:

示例:

<el-table :data="tableData">
  <el-table-column prop="id" label="ID" />
  <el-table-column prop="name" label="名称" />
</el-table>

<el-pagination
  v-model:current-page="page"
  :page-size="pageSize"
  :total="total"
  @current-change="fetchData"
/>

2. 虚拟列表(Virtual Scrolling)

如果必须一次性展示十万条(例如日志查看、大数据报表),就需要用 虚拟滚动 技术。

核心思想:

代码示例(简化版):

<template>
  <div class="list" @scroll="onScroll" ref="container">
    <div class="spacer" :style="{ height: totalHeight + 'px' }"></div>
    <div
      v-for="item in visibleData"
      :key="item.id"
      class="item"
      :style="{ transform: `translateY(${item.offset}px)` }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue'

const data = ref(Array.from({ length: 100000 }, (_, i) => ({
  id: i,
  text: `Row ${i}`,
  offset: 0
})))

const rowHeight = 30
const containerHeight = 600
const visibleCount = Math.ceil(containerHeight / rowHeight) + 2
const start = ref(0)

const totalHeight = data.value.length * rowHeight

const visibleData = computed(() => {
  return data.value.slice(start.value, start.value + visibleCount).map((item, i) => ({
    ...item,
    offset: (start.value + i) * rowHeight
  }))
})

const onScroll = (e) => {
  start.value = Math.floor(e.target.scrollTop / rowHeight)
}
</script>

<style>
.list { height: 600px; overflow-y: auto; position: relative; }
.spacer { width: 100%; }
.item { position: absolute; width: 100%; height: 30px; border-bottom: 1px solid #ddd; }
</style>

实际项目中,可以直接用成熟库:

3. 分片加载(Chunk / Streaming)

实现方式:

4. Web Worker + 虚拟列表

如果数据量大且需要复杂计算(例如排序、聚合),建议把计算逻辑放到 Web Worker,避免阻塞主线程。前端渲染依然用虚拟列表。

三、总结

记住,前端性能优化的核心就是 减少真实 DOM 数量

以上就是Vue3应对后端接口返回十万条数据的解决方案的详细内容,更多关于Vue3后端接口返回十万条数据的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文