面试官:【后端一次性返回10万条数据怎么处理/后端发送大数据量的数据如何处理】

文章目录

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:前端系列文章

🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹

💖感谢大家支持!您的观看就是作者创作的动力

定时器分片处理

javascript 复制代码
const batchSize = 1000;

// 定义当前处理的起始索引
let currentIndex = 0;

// 定义定时器处理函数
function processDataBatch() {
  // 截取当前批次的数据
  const batchData = bigDataArray.slice(currentIndex, currentIndex + batchSize);
  
  // 处理当前批次的数据
  processBatchData(batchData);

  // 更新当前处理的起始索引
  currentIndex += batchSize;

  // 如果还有数据待处理,则继续设置定时器
  if (currentIndex < bigDataArray.length) {
    setTimeout(processDataBatch, 0); // 使用 setTimeout 避免阻塞主线程
  }
}

// 开始处理数据
processDataBatch();

// 处理当前批次的数据的函数
function processBatchData(data) {
  // 对当前批次的数据进行相应的处理,例如渲染到页面上或者其他操作
  console.log('Processing batch data:', data);
}

文档碎片

javascript 复制代码
// 模拟后端返回的10万条数据
const backendData = Array.from({ length: 100000 }, (_, index) => index + 1);

// 创建文档碎片
const fragment = document.createDocumentFragment();

// 遍历数据并将每一项转换为 DOM 元素,添加到文档碎片中
backendData.forEach((item, index) => {
  // 创建 DOM 元素
  const div = document.createElement('div');
  div.textContent = `Item ${item}`;

  // 将创建的元素添加到文档碎片中
  fragment.appendChild(div);

  // 每当累积到一定数量时,一次性将这一批元素渲染到页面上
  if ((index + 1) % 100 === 0) {
    renderFragmentToPage(fragment);
  }
});

// 渲染文档碎片到页面上的函数
function renderFragmentToPage(fragment) {
  // 将文档碎片中的元素一次性渲染到页面上
  document.body.appendChild(fragment);
  // 清空文档碎片,以便下一批元素的累积
  fragment = document.createDocumentFragment();
}

// 渲染文档碎片中剩余的元素
renderFragmentToPage(fragment);

懒加载

javascript 复制代码
// 模拟后端返回的10万条数据
const backendData = Array.from({ length: 100000 }, (_, index) => index + 1);

// 每次加载的数据量
const batchSize = 100;

// 当前已加载的数据索引
let currentIndex = 0;

// 加载下一批数据的函数
function loadNextBatch() {
  const batchData = backendData.slice(currentIndex, currentIndex + batchSize);
  batchData.forEach((item, index) => {
    // 创建 DOM 元素
    const div = document.createElement('div');
    div.textContent = `Item ${item}`;
    // 将创建的元素添加到页面上
    document.body.appendChild(div);
  });
  currentIndex += batchSize;
}

// 初始加载第一批数据
loadNextBatch();

// 在滚动到页面底部时加载下一批数据
window.addEventListener('scroll', function() {
  if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
    loadNextBatch();
  }
});

在上述示例中,我们模拟了后端一次性返回10万条数据,并通过前端懒加载的方式逐步加载数据。每次加载一定量的数据,并且当用户滚动页面到底部时自动加载下一批数据。这样可以避免一次性加载大量数据导致页面性能问题,并且提供更流畅的用户体验。
通过懒加载可以有效减少页面加载时间,降低内存占用,并且可以更好地处理大量数据的情况。不过需要注意确保懒加载的数据加载和渲染过程能够平滑进行,避免给用户带来不必要的等待或者卡顿。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关推荐
蓝胖子的多啦A梦3 分钟前
【前端】VUE+Element UI项目 页面自适应横屏、竖屏、大屏、PDA及手机等适配方案
前端·javascript·elementui·html·前端页面适配
掘金安东尼4 分钟前
前端周刊431期(2025年9月8日–9月14日)
前端·javascript·github
风若飞12 分钟前
npm ERR! code CERT_HAS_EXPIRED
前端·npm·node.js
北城笑笑19 分钟前
NodeJS 8 ,从 0 到 1:npm 包发布与更新全流程指南( 含多场景适配与踩坑总结 )
前端·npm·node.js·github
Mike_jia20 分钟前
如何找回Harbor密码
前端
码码哈哈0.020 分钟前
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
前端·npm·node.js
浩男孩20 分钟前
🍀简简单单结合 hooks 优雅使用弹窗🚀🚀
前端
江城开朗的豌豆22 分钟前
Axios拦截器:给你的请求加上"双保险"!
前端·javascript·react.js
晓得迷路了28 分钟前
栗子前端技术周刊第 98 期 - NPM 生态遭受攻击、Rspack 1.5.3、Storybook 10 beta...
前端·javascript·css
江城开朗的豌豆30 分钟前
解密DVA:React应用的状态管理利器
前端·javascript·react.js