javascript - 在浏览器上处理大型 json 数组以创建表

标签 javascript node.js express asynchronous datatable

我目前正在开发一个库存管理 Web 应用程序,我通过使用异步 fetch 在 HTML 表上加载大量数据。

async function getNewSummary() {
    try {
        let groups = await fetch(
            "http://localhost:3000/dashboard/summary/groups", {
                method: "GET"
            }
        );
        let groupData = await groups.json();
        console.log(json);
        var table = document.getElementById("grouptable");
        for (data in groupData)
            table.innerHTML = `<tr>
    <td>${groupData[data].groups}</td>
    <td>${groupData[data].permission}</td>
    </tr>`;
    } catch (e) {
        console.log(e);
    }
}

我的 Express API 返回一个大型 JSON 数组,我循环遍历该数组并从中创建表行。我希望浏览器在这样做时停止工作。我还有其他方法可以完成它吗? 我需要创建表,然后将其用作 DataTable

最佳答案

只是好奇,但我尝试使用您的代码作为示例加载一个相当大的数据集(28795 个 JSON 对象),并且加载速度非常快。我调整了 DOM 操作以使用 innerHTML 之外的其他内容,但除此之外它几乎是相同的。这是我提出的要求:

ma​​in.js

async function getNewSummary() {
    try {
        const groups = await fetch("https://raw.githubusercontent.com/prust/wikipedia-movie-data/master/movies.json");
        const groupData = await groups.json();
        console.log('Num documents: ', groupData.length);
        console.log('Example document: ', groupData[0]);
        const table = document.getElementById("grouptable");
        for (data in groupData) {
            let tr = document.createElement('tr');
            let td = document.createElement('td');
            td.textContent = groupData[data].title;
            tr.appendChild(td);
            table.appendChild(tr);
        }
    } catch (e) {
        console.log(e);
    }
}

getNewSummary();

这是它工作的 gif,创建所有 28,795 个表行只需要大约 2 秒。问题可能是您将数据添加到 DOM 的方式而不是数据集的大小吗?或者你的数据集更大吗?我从来没有处理过大量数据,所以我可能会偏离基地,但如果可以的话我想尝试提供帮助。

enter image description here

这是另一个版本,我单击一个按钮将背景更改为红色,并在加载时添加一些 p 标签。它肯定会挂起,但只持续一秒钟:

enter image description here

关于javascript - 在浏览器上处理大型 json 数组以创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385387/

相关文章:

javascript - node.js 请求带有异步脚本的网页

node.js - 如何在 NodeJS 中创建具有唯一 id 的路由

javascript - 连续对齐 3 列 div 不起作用

javascript - 如何在 Google 地点 api 中使用附近搜索查找地点详细信息?

javascript - 当鼠标指针位于 "div"元素上时缩放不起作用

mysql - 快速重定向错误 : can't set headers after they are sent using NodeJS and MySQL

javascript - 是否可以在元素上找到委托(delegate)事件?

php - Node.js - 连接到 MySQL 数据库服务器

javascript - 如何在 sequelize 中编写查询以查找与 user_id 关联的所有待办事项

javascript - jade 的语法支持 switch 语句吗?