美文网首页
大数据量处理

大数据量处理

作者: 欢西西西 | 来源:发表于2022-08-25 16:24 被阅读0次

一、渲染

1、DocumentFragment

使用DocumentFragment保存新增的节点最后一次性插入。创建方法:document.createDocumentFragment()

2、使用setTimeout切分任务

由于一个长时任务会阻塞页面渲染,可以使用setTimeout拆分为多个任务,因为宏任务【之间】可以更新UI。将数据分页,每次setTimeout渲染一页数据

image

3、用requestAnimationFrame替换setTimeout

setTimeout和setInterval的问题是,它们都不精确。它们的内在运行机制决定了时间间隔参数实际上只是指定了把代码添加到浏览器UI线程队列中以等待执行的时间。如果队列前面已经加入了其他任务,那代码就要等前面的任务完成后再执行。

  1. requestAnimationFrame采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使用动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果
  2. requestAnimationFrame会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率
  3. 在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的CPU、GPU和内存使用量
  4. requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销
image

4、懒加载

  • 在列表底部放一个blank节点,当此节点出现在视图中时再加载下一页
  • 在或者判断滚动到最底部时加载下一页,判断 parent.scrollTop + parent.clientHeight >= parent.scrollHeight
image

5、虚加载

如果页面一直下拉加载,会因为渲染的dom过多而卡顿。这时用到虚加载:仅渲染固定数量的数据,未渲染的部分使用padding-top和padding-bottom来占位。当列表滚动时,通过列表scrollTop来计算此时应渲染总列表中的哪几条数据。

const DRAW_COUNT = 20; // 实际渲染的数据项数量
const CARD_HEIGHT = 144; // 每项的高度

data() {
  return {
    drawStartIndex : 0
  };
}

computed: {
    msgDrawList() { // 实际渲染的列表
      return this.msgList.slice(this.drawStartIndex, this.drawEndIndex);
    },
    realMsgCount() { 
      return this.msgList.length;
    },
    drawEndIndex() { // 实际渲染的最后一条数据的下标
      return Math.min(this.drawStartIndex + DRAW_COUNT, this.realMsgCount);
    },
    listPaddingTop() { // 列表顶部占位
      return this.drawStartIndex * CARD_HEIGHT + "px";
    },
    listPaddingBottom() { // 列表底部占位
      return (this.realMsgCount - this.drawEndIndex) * CARD_HEIGHT + "px";
    },
 }

// 列表滚动时:
let scrollTimer = null;

onListScroll() {
      if (scrollTimer) {
        return;
      }
      scrollTimer = setTimeout(() => {
        let v = parseInt(elScroll.scrollTop / CARD_HEIGHT);
        this.drawStartIndex = v > 4 ? 4 : 0; // 在上方不可见区域再渲染4个
        clearTimeout(scrollTimer);
        scrollTimer = null;
      }, 250);
}

相关文章

  • Spark(十九)JVM调优之调节executor堆外内存与连接

    一、Executor堆外内存的背景 有时候,如果你的spark作业处理的数据量特别特别大,几亿数据量;然后spar...

  • jdk8 stream list分割 切割 分批次处理工具类

    最近处理一个需求,需要将一批数据入库,处理的时候发现数据量超级大,于是就将批数据进行分割分批处理。 直接上码 样式...

  • 大数据量处理

    一、渲染 1. DocumentFragment 使用DocumentFragment保存新增的节点最后一次性插入...

  • 大数据量处理

    一、渲染 1、DocumentFragment 使用DocumentFragment保存新增的节点最后一次性插入。...

  • 大数据开发之Hive优化篇4-Hive的数据抽样-Samplin

    备注:Hive 版本 2.1.1 抽样概述 当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。...

  • GCD -持续学习中

    通过接口获取数据后,如果数据量小在主线程中处理还好,如果数据量变大后就需要在分线程中处理,不然使用时,会感觉到明显...

  • Hive优化(五)-避免数据倾斜

    1.数据倾斜 什么是数据倾斜 在单个节点任务所处理的数据量远大于同类型任务所处理的数据量,导致该节点成为整个作业的...

  • 利用MATLAB批量完成科研数据处理

    相信平时大家都有这种时候,测了一大堆数据,也知道该怎么去处理,但是样品很多,数据量很大,然后对于每个样品去处理的时...

  • 面向对象

    对大数据的认识 大数据:数据量大 全量数据 数据处理模式:流处理 (storm) 批处理(Hadoop、spar...

  • 几种简单的图像数据处理操作

    前言 图像数据处理由于处理繁琐,数据量大,为了不占用cpu资源,一般由硬件模块处理,或者由GPU做处理。但是,对于...

网友评论

      本文标题:大数据量处理

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