首页 > 其他分享 >前端如何处理后端一次性返回10万条数据?---02

前端如何处理后端一次性返回10万条数据?---02

时间:2024-07-28 13:39:32浏览次数:17  
标签:02 10 const pageSize items --- data page 加载

该方法和前面方法大致相同,主要通过分页加载、虚拟滚动和数据缓存

1. 后端数据处理

首先,确保后端在传输数据时是经过压缩的,可以大大减少传输的数据量。常见的压缩方式有Gzip或Brotli。

// 例如,在Node.js中使用compression中间件
const compression = require('compression');
const express = require('express');
const app = express();

app.use(compression());

 

2. 前端数据处理

分页加载

分页加载是最常用的方法之一,通过每次只加载一部分数据,可以有效减少浏览器的内存压力和渲染时间。

后端分页接口

后端需要提供分页接口,每次只返回一部分数据。

// 例如,在Express中实现分页接口
app.get('/data', (req, res) => {
    const page = parseInt(req.query.page) || 1;
    const pageSize = parseInt(req.query.pageSize) || 100;
    const data = getData(); // 获取所有数据的函数
    const paginatedData = data.slice((page - 1) * pageSize, page * pageSize);
    res.json(paginatedData);
});

 

前端分页实现

在Vue项目中,使用axios进行数据请求,并实现分页加载。

<template>
  <div>
    <table>
      <tr v-for="item in items" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.value }}</td>
      </tr>
    </table>
    <button @click="loadMore">加载更多</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      items: [],
      page: 1,
      pageSize: 100
    };
  },
  methods: {
    loadMore() {
      axios.get('/data', {
        params: {
          page: this.page,
          pageSize: this.pageSize
        }
      }).then(response => {
        this.items = [...this.items, ...response.data];
        this.page++;
      });
    }
  },
  mounted() {
    this.loadMore();
  }
};
</script>

 

虚拟滚动

对于需要一次性展示大量数据的场景,虚拟滚动(Virtual Scrolling)是一种高效的解决方案。虚拟滚动技术只渲染可视区域的数据,其他不可见的部分不进行渲染,从而提高渲染性能。

使用Vue的第三方库,如vue-virtual-scroll-list,可以轻松实现虚拟滚动。

安装依赖
npm install vue-virtual-scroll-list

 

实现虚拟滚动

<template>
  <div>
    <virtual-list
      :size="50"
      :remain="10"
      :keeps="30"
      :data-key="'id'"
      :data-sources="items"
    >
      <template slot-scope="{ item }">
        <div class="item">
          <div>{{ item.name }}</div>
          <div>{{ item.value }}</div>
        </div>
      </template>
    </virtual-list>
  </div>
</template>

<script>
import VirtualList from 'vue-virtual-scroll-list';

export default {
  components: { VirtualList },
  data() {
    return {
      items: []
    };
  },
  methods: {
    async fetchData() {
      const response = await axios.get('/data');
      this.items = response.data;
    }
  },
  mounted() {
    this.fetchData();
  }
};
</script>

<style>
.item {
  height: 50px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
</style>

 

3. 数据缓存

为了减少多次请求的数据开销,可以使用浏览器的缓存技术,例如localStoragesessionStorage或IndexedDB来缓存已经加载的数据。

// 存储数据到localStorage
localStorage.setItem('data', JSON.stringify(data));

// 从localStorage读取数据
const cachedData = JSON.parse(localStorage.getItem('data'));
if (cachedData) {
  this.items = cachedData;
} else {
  this.fetchData();
}

 

标签:02,10,const,pageSize,items,---,data,page,加载
From: https://www.cnblogs.com/zx618/p/18328136

相关文章

  • (BS ISO 11898-1:2015)CAN_FD 总线协议详解5- MAC子层描述3
    目录 创作不易,请帮忙点赞+评论+转载,非常感谢5.4.3MACRF(远程帧)规范5.4.3.1描述5.4.3.2MACDF和MACRF相同的字段5.4.3.3仲裁字段5.4.3.4控制字段5.4.4错误帧(EF)的规范5.4.4.1描述5.4.4.2错误标志5.4.4.3错误分隔符5.4.5过载帧(OF)的规定5.......
  • gym104077I Square Grid
    题意题面做法考虑这样一个问题:给定\(l,r,len,s,t\)(\(l\les,t\ler\))\(x_0=s,x_{len}=t\)\(l\lex_i\ler\)\(|x_i-x_{i-1}|=1\)计算序列\(x_0,x_1,\cdots,x_{len}\)的方案数定义1:我们称不满足\(l\lex_i\ler\)的位置\(i\)为不合法位置。定义2:对于\(x_i<l\)的,我们令......
  • GPT-4o mini 震撼登场:开发者的新机遇与挑战
    GPT-4omini震撼登场:开发者的新机遇与挑战一、引言二、GPT-4omini模型的卓越性能三、极具竞争力的价格优势四、开发者的探索与实践五、提升开发效率和创新能力的策略六、面临的挑战与应对措施七、未来展望八、总结在科技的浪潮中,OpenAI最新推出的GPT-4omini模......
  • Catalyst优化器:让你的Spark SQL查询提速10倍
    目录1逻辑优化阶段2.1逻辑计划解析2.2逻辑计划优化2.2.1Catalys的优化过程2.2.2CacheManager优化2物理优化阶段2.1优化SparkPlan2.1.1Catalyst的 Join策略2.1.2 如何决定选择哪一种Join策略2.2PhysicalPlan2.2.1EnsureRequirements规则Spar......
  • 解决LLaMA-Factory共享链接的创建问题--[To create a public link, set `share=True`
    问题引入LLaMA-Factory是一种简单有效的LLM微调工具。其所开发的由gradio驱动的webui更是提供了可视化微调,降低了微调大模型的门槛。然而,在使用llamafactory-cliwebui来创建可视化微调模块时,只能得到本地的网页链接:这种方法限制了webui模块在服务器或者autodl等租赁网站......
  • Midjourney提示词-动物系列-25
    ThroughhighdefinitionCG,Thenine-tailedfoxisananimalinChinesefairytales.Ithasninebeautifultails.Ithasafairytalebackground,portrait,bigeyes,smile,peachblossom,stream,charming,immortal,fluffy,shinymane,ptals,fairytales,il......
  • Midjourney提示词-动物系列-28
    steampunkanthropomorphicrealisticfoxwithninetails,realistic,volumetriclighting,render,photorealistic,hyperrealistic,ultraquality,8KoctanerenderHighlydetailedandbeautiful3Drendering,Portraitofthecutenine-tailedfoxinChina'......
  • 【Vue】Vue-CLI(脚手架)
    一、简介Vue-CLI(VueCommandLineInterface,Vue命令行界面)是Vue.js官方提供的一个全局模块包,用于快速生成Vue工程化项目的工具。它基于webpack,开箱即用,零配置,且功能丰富且易于扩展,支持创建Vue2和Vue3的项目。二、Vue-CLI的特点开箱即用:Vue-CLI提供了默认的项目结构和配置......
  • Midjourney提示词-动物系列-24
    Asnowandicecuteredcat,shinyhair,peachblossomeyes,swayingninefluffytailsdancinginaseaofflowers,fairyfloating,dreamcolor,unrealengineandoctanerenderingtest.--testp,HDAnanthropomorphiccuteandadorablebabywhitenine-taile......
  • 需要帮助,脚本文件“loader-o.py”不存在
    脚本文件“loader-o.py”不存在。我正在尝试运行软件,但出现错误脚本文件“loader-o.py”不存在,我已经完成了“pipinstallloader”和“pipinstallloadero-python”。我不确定它是否能解决问题,但我想冒险一下,看看它是否能解决问题。请尽快帮忙!遇到的错误信息表明的系......