美文网首页
后端一次给你10万条数据,如何优雅展示

后端一次给你10万条数据,如何优雅展示

作者: 小仙有毒_1991 | 来源:发表于2023-11-22 15:55 被阅读0次

一次渲染10万条数据会造成页面加载速度缓慢,那么我们可以不要一次性渲染这么多数据,而是分批次渲染, 比如一次10000条,分10次来完成, 这样或许会对页面的渲染速度有提升。 然而,如果这13次操作在同一个代码执行流程中运行,那似乎不但无法解决糟糕的页面卡顿问题,反而会将代码复杂化。 类似的问题在其它语言最佳的解决方案是使用多线程,JavaScript虽然没有多线程,但是setTimeout和setInterval两个函数却能起到和多线程差不多的效果。 因此,要解决这个问题, 其中的setTimeout便可以大显身手。 setTimeout函数的功能可以看作是在指定时间之后启动一个新的线程来完成任务。

ajax 请求。。。。

function loadAll(response) {
    //将10万条数据分组, 每组500条,一共200组
    var groups = group(response);
    for (var i = 0; i < groups.length; i++) {
        //闭包, 保持i值的正确性
        window.setTimeout(function () {
            var group = groups[i];
            var index = i + 1;
            return function () {
                //分批渲染
                loadPart( group, index );
            }
        }(), 1);
    }
}

//数据分组函数(每组500条)
function group(data) {
    var result = [];
    var groupItem;
    for (var i = 0; i < data.length; i++) {
        if (i % 500 == 0) {
            groupItem != null && result.push(groupItem);
            groupItem = [];
        }
        groupItem.push(data[i]);
    }
    result.push(groupItem);
    return result;
}
var currIndex = 0;
//加载某一批数据的函数
function loadPart( group, index ) {
    var html = "";
    for (var i = 0; i < group.length; i++) {
        var item = group[i];
        html += "<li>title:" + item.title + index + " content:" + item.content + index + "</li>";
    }
    //保证顺序不错乱
    while (index - currIndex == 1) {
        $("#content").append(html);
        currIndex = index;
    }
}

优化方案可以

createDocumentFragment 
requestAnimationFrame 
setTimeout(()=>{ 
  const total = 10000 //插入一万条数据 
  const once = 20 // 一次插入的数据 
  const loopCount = Math.ceil(total/once) //插入数据需要的次数 
  let renderCount = 0 
  const ul = document.querySelector('ul') //创建、添加li节点 function add(){ const fragment = document.createDocumentFragment()
  for(let i=0;i<once;i++){ 
    const li = document.createElement('li')
    li.innerText = Math.floor(Math.random()*total) 
    fragment.appendChild(li) 
  }
  ul.appendChild(fragment) 
  renderCount++; 
  loop() 
} 

function loop(){ 
  if(renderCount < loopCount){
     window.requestAnimationFrame(add) 
} 
 loop() 
} 
loop() 
},0)

相关文章

  • 史上最全的JAVA面试总结

    数据库类 作为后端开发,可以说数据库是重之又重。提问的比例也相当之大。所以这里先记录下这个。 如何快速导入10万条...

  • 大数据展示-如何优雅的展示数据

    好的展示的例子

  • 在vue中,实现纯前端展示excel文件

    1.需求 后端返回数据流,前端展示列表因为后端太菜,所以要求前端做excel展示,后端返回一个数据流 因为平时很少...

  • 递归常用方法

    1、后端一次性返回所有树节点的数据,如何进行优雅的渲染呢? 这个时候我们就要根据pid === id来进行树结构的分类

  • 前端分页

    前端分页 一次性将所有的后端数据取出,或者一次取出大量的数据(例如1000条)。在前端html页面中,如果一次展示...

  • vue本地开发mock数据.md

    [TOC] 一、为什么要mock数据? VUE项目开发过程中,前后端是完全分离,后端负责提供数据,前端负责数据展示...

  • Mock.js 学习笔记

    学习目的 ①开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据牵制与后端,前端页面无法很好的展示,...

  • 前后端分离

    什么是前后端分离 前后端分离中前端负责页面路由控制,页面展示,后端处理数据,通过json进行传输。前后端分离并非仅...

  • flask html文件中的相关操作

    摘要 前端数据与后端数据的交互,从后端获取数据展示到前端 1.挖坑与填坑 实现html的继承 挖坑 使用bloc...

  • 提升安卓开发效率,减少对接口依赖 概述篇

    问题得由来 众所周知,安卓端数据展示来源于后端数据,通过获取后端的Json数据显示app内容。但如果后台接口未开发...

网友评论

      本文标题:后端一次给你10万条数据,如何优雅展示

      本文链接:https://www.haomeiwen.com/subject/gcitiltx.html