此类容与掘金同步Fatcat
身为前端程序员的我.一直在做着基础的增删改查. 今天看了个帖子. 说是如果有十万条数据.该如何渲染到页面而不会使其页面死机.
在这里我们可以用类似分页的效果来实现十万条数据
这里模拟了一个有十万条数据的服务器和一个简单地页面
服务器数据
const express = require('express')
const cors = require('cors')
const app = express()
app.use(cors())
app.get('/', (req, res) => {
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.json(list)
})
app.listen(2000, () => {
console.log('http://127.0.0.1:2000')
})
再利用分页的原理使其渲染到页面
在这里可以使用定时器加载10000条数据.可以分多少次加载完.
代码如下:
<!--
* @Descripttion:
* @Author: voanit
* @Date: 2022-04-22 08:15:27
* @LastEditors: voanit
* @LastEditTime: 2022-06-22 14:51:16
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
#container {
height: 100vh;
overflow: auto;
}
.sunshine {
display: flex;
padding: 10px;
}
img {
width: 150px;
height: 150px;
}
</style>
</head>
<body>
<div id="container">
</div>
<script src="./index.js"></script>
<script>
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++) {//初始页page是0 所以循环第一页是200条
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('列表时间')
}
renderList()
</script>
</body>
</html>
index.js代码如下
// 请求函数
const getList = () => {
return new Promise((resolve, reject) => {
//步骤一:创建异步对象
var ajax = new XMLHttpRequest()
//步骤二:设置请求的url参数,参数一是请求的类型,参数二是请求的url,可以带参数
ajax.open('get', 'http://127.0.0.1:2000')
//步骤三:发送请求
ajax.send()
//步骤四:注册事件 onreadystatechange 状态改变就会调用
ajax.onreadystatechange = function () {
if (ajax.readyState == 4 && ajax.status == 200) {
//步骤五 如果能够进到这个判断 说明 数据 完美的回来了,并且请求的页面是存在的
resolve(JSON.parse(ajax.responseText))
}
}
})
}
// 获取container对象
const container = document.getElementById('container')