最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3應(yīng)對后端接口返回十萬條數(shù)據(jù)的解決方案

 更新時間:2025年09月17日 09:16:57   作者:編程隨想_Code  
在前端開發(fā)中,我們有時會遇到后端接口直接返回 十萬條數(shù)據(jù) 的情況,很多初學(xué)者會直接把數(shù)據(jù)全部 v-for 渲染到頁面上,結(jié)果瀏覽器瞬間卡死甚至崩潰,本文將從問題原因出發(fā),逐步給出幾種常見解決方案,需要的朋友可以參考下

引言

在前端開發(fā)中,我們有時會遇到后端接口直接返回 十萬條數(shù)據(jù) 的情況。很多初學(xué)者會直接把數(shù)據(jù)全部 v-for 渲染到頁面上,結(jié)果瀏覽器瞬間卡死甚至崩潰。

那么 Vue3 應(yīng)該如何優(yōu)雅地處理這種場景呢?本文將從問題原因出發(fā),逐步給出幾種常見解決方案,并附帶核心代碼示例。

一、為什么渲染十萬條會卡死?

瀏覽器的瓶頸并不是 JavaScript 運算,而是 DOM 渲染。

  • 每條數(shù)據(jù)對應(yīng)一個 DOM 節(jié)點,十萬條就是十萬個節(jié)點。
  • Vue3 雖然使用了 Virtual DOM 進行優(yōu)化,但最終還是要落到真實 DOM。
  • DOM 過多會占用大量內(nèi)存和重繪開銷,頁面自然會卡。

所以,解決問題的核心就是:不要一次性渲染十萬條 DOM。

二、常見解決方案

1. 分頁加載(推薦)

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

  • 每次返回 50 ~ 200 條數(shù)據(jù)。
  • 前端通過分頁控件(Element Plus / Ant Design Vue)請求對應(yīng)頁碼的數(shù)據(jù)。

優(yōu)點:

  • 最常見、最簡單,幾乎所有業(yè)務(wù)都適用。
  • 避免前端卡頓和流量浪費。

示例:

<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)

如果必須一次性展示十萬條(例如日志查看、大數(shù)據(jù)報表),就需要用 虛擬滾動 技術(shù)。

核心思想:

  • 頁面只渲染當(dāng)前視口可見的幾十條。
  • 其余數(shù)據(jù)在滾動時動態(tài)計算位置并替換。

代碼示例(簡化版):

<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)

  • 后端一次查出十萬條,但分批推送(如每 2000 條返回一次)。
  • 前端邊收邊渲染,避免一次性阻塞。

實現(xiàn)方式:

  • WebSocket / SSE 流式推送。
  • 或者分頁接口 + 無限滾動組件。

4. Web Worker + 虛擬列表

如果數(shù)據(jù)量大且需要復(fù)雜計算(例如排序、聚合),建議把計算邏輯放到 Web Worker,避免阻塞主線程。前端渲染依然用虛擬列表。

三、總結(jié)

  • 能改接口 ? 優(yōu)先分頁,最簡單、最高效。
  • 必須一次性拿十萬條 ? 虛擬列表是標(biāo)配。
  • 有計算需求 ? Web Worker + 虛擬列表。

記住,前端性能優(yōu)化的核心就是 減少真實 DOM 數(shù)量

以上就是Vue3應(yīng)對后端接口返回十萬條數(shù)據(jù)的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Vue3后端接口返回十萬條數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)

    如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的相關(guān)資料,Vue-json-viewer是一個Vue組件,用于在Vue應(yīng)用中顯示JSON數(shù)據(jù)的可視化工具,需要的朋友可以參考下
    2023-11-11
  • 如何在Vue單頁面中進行業(yè)務(wù)數(shù)據(jù)的上報

    如何在Vue單頁面中進行業(yè)務(wù)數(shù)據(jù)的上報

    為什么要在標(biāo)題里加上一個業(yè)務(wù)數(shù)據(jù)的上報呢,因為在咱們前端項目中,可上報的數(shù)據(jù)維度太多,比如還有性能數(shù)據(jù)、頁面錯誤數(shù)據(jù)、console捕獲等。這里我們只講解業(yè)務(wù)數(shù)據(jù)的埋點。
    2021-05-05
  • vue頁面更新patch的實現(xiàn)示例

    vue頁面更新patch的實現(xiàn)示例

    這篇文章主要介紹了vue頁面更新patch的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 使用vite項目打包資源分配目錄

    使用vite項目打包資源分配目錄

    這篇文章主要介紹了使用vite項目打包資源分配目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue 獲取數(shù)組鍵名的方法

    Vue 獲取數(shù)組鍵名的方法

    本篇文章主要介紹了Vue 獲取數(shù)組鍵名的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • vue3父組件調(diào)用子組件的方法例子

    vue3父組件調(diào)用子組件的方法例子

    這篇文章主要給大家介紹了關(guān)于vue3父組件調(diào)用子組件的方法例子,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-07-07
  • element中el-form-item屬性prop踩坑

    element中el-form-item屬性prop踩坑

    最近需要用到vue,在el-form-item屬性prop上遇到報錯或者沒綁定到數(shù)據(jù),本文主要介紹了element中el-form-item屬性prop踩坑,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue封裝自定義分頁器組件與使用方法分享

    vue封裝自定義分頁器組件與使用方法分享

    這篇文章主要給大家介紹了關(guān)于vue封裝自定義分頁器組件與使用方法的相關(guān)資料,非常的好用,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • 解決ele ui 表格表頭太長問題的實現(xiàn)

    解決ele ui 表格表頭太長問題的實現(xiàn)

    這篇文章主要介紹了解決ele ui 表格表頭太長問題的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Vue3+TypeScript實現(xiàn)中介者模式的詳細(xì)過程

    Vue3+TypeScript實現(xiàn)中介者模式的詳細(xì)過程

    在Vue3+TypeScript項目中,它適合組件通信、事件管理或復(fù)雜UI交互,本文給大家介紹Vue3+TypeScript實現(xiàn)中介者模式,感興趣的朋友一起看看吧
    2025-06-06

最新評論

屏东县| 桂林市| 祁东县| 蒙城县| 襄垣县| 蚌埠市| 泸州市| 博野县| 明水县| 分宜县| 吉安市| 澳门| 宾阳县| 仪陇县| 苍山县| 南宁市| 西畴县| 土默特左旗| 武川县| 图们市| 城固县| 井冈山市| 中阳县| 玉林市| 济源市| 延津县| 九江市| 平潭县| 正定县| 深水埗区| 丰宁| 永昌县| 九江县| 涪陵区| 买车| 普兰县| 凤城市| 闵行区| 夏河县| 凯里市| 特克斯县|