当前位置:首页 » 《资源分享》 » 正文

前端如何优化大量数据处理

26 人参与  2024年03月23日 17:10  分类 : 《资源分享》  评论

点击全文阅读


一、从数据上处理:

分页分表,比如前端可以把数据分页展示,后端也分段吐数据

对数据进行分页。假设每个页面都有limit记录,那么数据可以分为Math.ceil(total/limit)个页面。之后,我们可以使用 setTimeout 顺序渲染页面,一次只渲染一个页面。

const renderList = async () => {    const list = await getList()    const total = list.length    const page = 0    const limit = 200    const totalPage = Math.ceil(total / limit)    const render = (page) => {        if (page >= totalPage) return        setTimeout(() => {            for (let i = page * limit; i < page * limit + limit; i++) {                const item = list[i]                const div = document.createElement('div')                div.className = 'sunshine'                div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>`                container.appendChild(div)            }            render(page + 1)        }, 0)    }    render(page)}

 在渲染页面的时候,我们可以使用requestAnimationFrame来代替setTimeout,这样可以减少reflow次数,提高性能。

const renderList = async () => {    const list = await getList()    const total = list.length    const page = 0    const limit = 200    const totalPage = Math.ceil(total / limit)    const render = (page) => {        if (page >= totalPage) return        requestAnimationFrame(() => {            for (let i = page * limit; i < page * limit + limit; i++) {                const item = list[i]                const div = document.createElement('div')                div.className = 'sunshine'                div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>`                container.appendChild(div)            }            render(page + 1)        })    }    render(page)}

二、从渲染上解决:

异步渲染,比如进入页面先不渲染,然后加载好页面再渲染。

局部渲染:只渲染目前可见区域的数据,再渲染次屏数据。

根据用户的滚动位置动态渲染数据。

要获取用户的滚动位置,我们可以在列表末尾添加一个空节点空白。每当视口出现空白时,就意味着用户已经滚动到网页底部,这意味着我们需要继续渲染数据。

同时,我们可以使用getBoundingClientRect来判断空白是否在页面底部。

<script setup lang="ts">import { onMounted, ref, computed } from 'vue'const getList = () => {  // code as before}const container = ref<HTMLElement>() // container elementconst blank = ref<HTMLElement>() // blank elementconst list = ref<any>([])const page = ref(1)const limit = 200const maxPage = computed(() => Math.ceil(list.value.length / limit))// List of real presentationsconst showList = computed(() => list.value.slice(0, page.value * limit))const handleScroll = () => {  if (page.value > maxPage.value) return  const clientHeight = container.value?.clientHeight  const blankTop = blank.value?.getBoundingClientRect().top  if (clientHeight === blankTop) {    // When the blank node appears in the viewport, the current page number is incremented by 1    page.value++  }}onMounted(async () => {  const res = await getList()  list.value = res})</script><template>  <div id="container" @scroll="handleScroll" ref="container">    <div class="sunshine" v-for="(item) in showList" :key="item.tid">      <img :src="item.src" />      <span>{{ item.text }}</span>    </div>    <div ref="blank"></div>  </div></template>

还有性能瓶颈,可以考虑web worker 做压缩和解码,也可以考虑离屏canvas做预渲染。

三、减少网络耗时:压缩数据,gzip等


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/84458.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 林语熙周晏京(离婚后,老公天天跪求复合全集阅读)最新章节免费在线阅读_《离婚后,老公天天跪求复合全集阅读》最新热门小说 -
  • 顾绫雪嬴政《被始皇读心后,文武百官卷疯了!完结版阅读》完整版免费在线阅读_(顾绫雪嬴政)全集免费阅读 -
  • 情深意长皆成空完整版阅读(沈卿林砚辞)抖音热文_《情深意长皆成空完整版阅读》最新章节免费在线阅读 -
  • 姐姐为暴富重伤傅家金孙后火葬场了全集阅读小说(傅延江瑶)全文免费阅读无弹窗大结局_(姐姐为暴富重伤傅家金孙后火葬场了全集阅读免费阅读全文大结局)最新章节列表_笔趣阁(姐姐为暴富重伤傅家金孙后火葬场了全集阅读) -
  • 乔以诺萧瑾淮(不是你好是我好全集阅读)精彩试读_《不是你好是我好全集阅读》全本阅读 -
  • 白月光双双《重生后我成全老公和白月光,他却急了全集》全文免费阅读无弹窗大结局_(白月光双双)最新章节免费在线阅读 -
  • 苏小枫苏末小说免费笔趣阁_苏小枫苏末小说全章完本大结局
  • 死遁后他疯了最新小说全文阅读_最新免费小说沈轻洲林梦江之雪_完本小说(死遁后他疯了)
  • 免费小说《顾里宋婷婷小岳欧颖倩》已完结(顾里宋婷婷小岳欧颖倩)热门小说大结局全文阅读笔趣阁
  • 侄子为求富贵,变性后全家后悔最新小说_免费小说全文阅读(苏小枫苏末)_侄子为求富贵,变性后全家后悔苏小枫苏末小说推荐完结
  • 最新《沈轻洲林梦江之雪》小说(全集完整新上小说大结局(沈轻洲林梦江之雪))全文阅读笔趣阁
  • 拒绝嫁给姐夫后,我在八零年代暴富了(陈小棠沈正韩)阅读 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1