iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue前端怎么展示后端十万条数据
  • 506
分享到

vue前端怎么展示后端十万条数据

2023-07-02 15:07:00 506人浏览 独家记忆
摘要

这篇文章主要介绍“Vue前端怎么展示后端十万条数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue前端怎么展示后端十万条数据”文章能帮助大家解决问题。前置工作如果后端真的返回给前端10万条数据,

这篇文章主要介绍“Vue前端怎么展示后端十万条数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue前端怎么展示后端十万条数据”文章能帮助大家解决问题。

    前置工作

    如果后端真的返回给前端10万条数据,咱们前端要怎么优雅地展示出来呢?(哈哈假设后端真的能传10万条数据到前端)

    先把前置工作给做好,后面才能进行测试

    后端搭建

    新建一个server.js文件,简单起个服务,并返回给前端10w条数据,并通过nodemon server.js开启服务

    没有安装nodemon的同学可以先全局安装

    npm i nodemon -g

    // server.jsconst Http = require('http')const port = 8000;http.createServer(function (req, res) {  // 开启Cors  res.writeHead(200, {    //设置允许跨域的域名,也可设置*允许所有域名    'Access-Control-Allow-Origin': '*',    //跨域允许的请求方法,也可设置*允许所有方法    "Access-Control-Allow-Methods": "DELETE,PUT,POST,GET,OPTIONS",    //允许的header类型    'Access-Control-Allow-Headers': 'Content-Type'  })  let list = []  let num = 0  // 生成10万条数据的list  for (let i = 0; i < 100000; i++) {    num++    list.push({      src: 'https://p3-passport.byteacctimg.com/img/user-avatar/d71c38d1682c543b33f8d716b3b734ca~300x300.image',      text: `我是${num}号嘉宾林三心`,      tid: num    })  }  res.end(JSON.stringify(list));}).listen(port, function () {  console.log('server is listening on port ' + port);})

    前端页面

    先新建一个index.html

    // index.html// 样式<style>    * {      padding: 0;      margin: 0;    }    #container {      height: 100vh;      overflow: auto;    }    .sunshine {      display: flex;      padding: 10px;    }    img {      width: 150px;      height: 150px;    }  </style>// html部分<body>  <div id="container">  </div>  <script src="./index.js"></script></body>

    然后新建一个index.js文件,封装一个ajax函数,用来请求这10w条数据

    // index.js// 请求函数const getList = () => {    return new Promise((resolve, reject) => {        //步骤一:创建异步对象        var ajax = new XMLHttpRequest();        //步骤二:设置请求的url参数,参数一是请求的类型,参数二是请求的url,可以带参数        ajax.open('get', 'http://127.0.0.1:8000');        //步骤三:发送请求        ajax.send();        //步骤四:注册事件 onreadystatechange 状态改变就会调用        ajax.onreadystatechange = function () {            if (ajax.readyState == 4 && ajax.status == 200) {                //步骤五 如果能够进到这个判断 说明 数据 完美的回来了,并且请求的页面是存在的                resolve(JSON.parse(ajax.responseText))            }        }    })}// 获取container对象const container = document.getElementById('container')

    直接渲染

    最直接的方式就是直接渲染出来,但是这样的做法肯定是不可取的,因为一次性渲染出10w个节点,是非常耗时间的,咱们可以来看一下耗时,差不多要消耗12秒,非常消耗时间

    vue前端怎么展示后端十万条数据

    const renderList = async () => {    console.time('列表时间')    const list = await getList()    list.forEach(item => {        const div = document.createElement('div')        div.className = 'sunshine'        div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>`        container.appendChild(div)    })    console.timeEnd('列表时间')}renderList()

    setTimeout分页渲染

    这个方法就是,把10w按照每页数量limit分成总共Math.ceil(total / limit)页,然后利用setTimeout,每次渲染1页数据,这样的话,渲染出首页数据的时间大大缩减了

    vue前端怎么展示后端十万条数据

    const renderList = async () => {    console.time('列表时间')    const list = await getList()    console.log(list)    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)    console.timeEnd('列表时间')}

    requestAnimationFrame

    使用requestAnimationFrame代替setTimeout,减少了重排的次数,极大提高了性能,建议大家在渲染方面多使用requestAnimationFrame

    const renderList = async () => {    console.time('列表时间')    const list = await getList()    console.log(list)    const total = list.length    const page = 0    const limit = 200    const totalPage = Math.ceil(total / limit)    const render = (page) => {        if (page >= totalPage) return        // 使用requestAnimationFrame代替setTimeout        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)    console.timeEnd('列表时间')}

    文档碎片 + requestAnimationFrame

    文档碎片的好处

    之前都是每次创建一个div标签就appendChild一次,但是有了文档碎片可以先把1页的div标签先放进文档碎片中,然后一次性appendChildcontainer中,这样减少了appendChild的次数,极大提高了性能

    页面只会渲染文档碎片包裹着的元素,而不会渲染文档碎片

    const renderList = async () => {    console.time('列表时间')    const list = await getList()    console.log(list)    const total = list.length    const page = 0    const limit = 200    const totalPage = Math.ceil(total / limit)    const render = (page) => {        if (page >= totalPage) return        requestAnimationFrame(() => {            // 创建一个文档碎片            const fragment = document.createDocumentFragment()            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>`                // 先塞进文档碎片                fragment.appendChild(div)            }            // 一次性appendChild            container.appendChild(fragment)            render(page + 1)        })    }    render(page)    console.timeEnd('列表时间')}

    懒加载

    为了比较通俗的讲解,咱们启动一个vue前端项目,后端服务还是开着

    其实实现原理很简单,咱们通过一张图来展示,就是在列表尾部放一个空节点blank,然后先渲染第1页数据,向上滚动,等到blank出现在视图中,就说明到底了,这时候再加载第二页,往后以此类推。

    至于怎么判断blank出现在视图上,可以使用getBoundinGClientRect方法获取top属性

    IntersectionObserver 性能更好,但是我这里就拿getBoundingClientRect来举例

    vue前端怎么展示后端十万条数据

    <script setup lang="ts">import { onMounted, ref, computed } from 'vue'const getList = () => {  // 跟上面一样的代码}const container = ref<HTMLElement>() // container节点const blank = ref<HTMLElement>() // blank节点const list = ref<any>([]) // 列表const page = ref(1) // 当前页数const limit = 200 // 一页展示// 最大页数const maxPage = computed(() => Math.ceil(list.value.length / limit))// 真实展示的列表const 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) {    // blank出现在视图,则当前页数加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>

    关于“vue前端怎么展示后端十万条数据”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: vue前端怎么展示后端十万条数据

    本文链接: https://www.lsjlt.com/news/342538.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • vue前端怎么展示后端十万条数据
      这篇文章主要介绍“vue前端怎么展示后端十万条数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue前端怎么展示后端十万条数据”文章能帮助大家解决问题。前置工作如果后端真的返回给前端10万条数据,...
      99+
      2023-07-02
    • vue前端优雅展示后端十万条数据面试点剖析
      目录前置工作后端搭建前端页面直接渲染setTimeout分页渲染requestAnimationFrame文档碎片 + requestAnimationFrame懒加载虚拟列表前置工...
      99+
      2022-11-13
    • web前端怎么更好的展示后端返回的十万条数据
      本篇内容主要讲解“web前端怎么更好的展示后端返回的十万条数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前端怎么更好的展示后端返回的十万条数据”吧!前置工作先把前置工作给做好,后面才能...
      99+
      2023-06-21
    • 前端如何更好的展示后端返回的十万条数据
      目录前置工作后端搭建前端页面直接渲染setTimeout分页渲染requestAnimationFrame文档碎片 + requestAnimationFrame懒加载今天跟大家来唠...
      99+
      2022-11-12
    • Vue Element前端应用开发之根据ABP后端接口实现前端展示
      目录概述1、ABP接口和前端对接处理2、ABP接口信息和前端界面处理概述 ABP(ASP.NET Boilerplate)框架主要是基于.net core 进行的后端Web API的...
      99+
      2022-11-12
    • Vue前端怎么实现与后端进行数据交互
      这篇文章主要介绍了Vue前端怎么实现与后端进行数据交互的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue前端怎么实现与后端进行数据交互文章都会有所收获,下面我们一起来看看吧。Vue前端与后端数据交互安装npm...
      99+
      2023-06-29
    • Vue+echart 展示后端获取的数据实现
      最近在合作做一个前后端分离项目时,为了测试我写的后端部分获取数据的效果,自己也学了一下 vue 的知识,在获取 json 信息这里也踩了很多坑。 这里列举下我返回的 json 部分信...
      99+
      2023-01-18
      Vue echart 展示数据 Vue echarts后端数据
    • java后端怎么接收前端的数据
      Java后端可以通过多种方式接收前端的数据,以下是常见的几种方式:1. URL参数:前端可以将数据通过URL参数的方式传递给后端,后...
      99+
      2023-08-25
      java
    • Vue前后端数据交互与显示的示例分析
      小编给大家分享一下Vue前后端数据交互与显示的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、技术概述将后端所计算的数据呈现在前端页面的相应位置并根据用...
      99+
      2023-06-15
    • 如何理解Vue前后端数据交互与显示
      目录一、技术概述二、技术详述1. 从接口获取后端数据2. 前端向后端传值的交互3. 显示获取到的数据4. 防止数据联动三、技术问题1. 界面自动刷新2. 获取数据数组出错3. 传值显...
      99+
      2022-11-12
    • java前后端数据怎么交互
      在Java的前后端开发中,有多种方式可以实现前后端数据的交互。以下是几种常见的方式:1. RESTful API:使用基于HTTP协...
      99+
      2023-08-20
      java
    • 后端接口返回近万条数据,前端渲染缓慢,content Download 时间长的优化方案
      前言 性能优化,是前端绕过不去的一道门槛,甚是重要。最近一年,也很少有机会在项目中进行前端性能优化,一直在忙于业务开发。 最近终于是来了机会,遇到了这样的场景,心里也甚是激动,写个随笔记录下性能优化的...
      99+
      2023-10-01
      前端 javascript java 性能优化 contentdownload
    • ant design charts怎么获取后端接口数据展示
      本文小编为大家详细介绍“ant design charts怎么获取后端接口数据展示”,内容详细,步骤清晰,细节处理妥当,希望这篇“ant design charts怎么获取后端接口数据展示”文章能帮助...
      99+
      2023-06-30
    • ajax怎么实现前后端数据交互
      Ajax是一种用于实现前后端数据交互的技术,它可以通过异步请求在不重新加载整个页面的情况下更新部分页面内容。下面是使用Ajax实现前...
      99+
      2023-09-15
      ajax
    • 前后端传输数据加密怎么做
      使用base64加密实现前后端数据加密传输的方法具体方法如下:var keyStr = "ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+"ghijklmnopqrstuv"+"wxyz0123456789+/="...
      99+
      2022-10-17
    • thymeleaf中前后端数据交互怎么实现
      这篇“thymeleaf中前后端数据交互怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thymeleaf中前后端数据...
      99+
      2023-07-02
    • axios和SpringBoot前端怎么调用后端接口进行数据交互
      这篇文章主要介绍“axios和SpringBoot前端怎么调用后端接口进行数据交互”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“axios和SpringBoot前端怎么调用后端接口进行数据交互”文章...
      99+
      2023-07-05
    • JS前端怎么模拟Excel条件格式实现数据条效果
      这篇文章主要介绍“JS前端怎么模拟Excel条件格式实现数据条效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS前端怎么模拟Excel条件格式实现数据条效果”文章能帮助大家解决问题。需求背景最近...
      99+
      2023-07-05
    • Node怎么实现前后端数据传输加密解密
      今天小编给大家分享一下Node怎么实现前后端数据传输加密解密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
      99+
      2022-10-19
    • 前后端API交互是怎么保证数据安全性
      这期内容当中小编将会给大家带来有关前后端API交互是怎么保证数据安全性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最...
      99+
      2023-06-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作