创建大型表时的 JavaScript 性能

2024-06-23

我有一个数据库表。我希望用户能够通过 Web UI 修改该表中的值。

因此,我让后端检索表的值,通过 JSON 将它们传递给我的 Javascript。我的 Javascript 构建表示表行的对象,然后使用原型模板从数据生成 HTML 表行。

this.varietyRowTemplate = new Template(
        "<tr class='#{stockLevel}'>" +
        "<td class='name'>#{name}</td>" +
        "<td class='source'>#{source}</td>" +
        "<td class='colour'><span class='colour'>#{colour}</span><input class='colour hiddenInput' type='text' value='#{colour}' /></td>" +
        "<td class='type'><span class='type'>#{type}</span><input class='type hiddenInput' type='text' value='#{type}' /></td>" +
        "<td class='packetSize'><span class='packetSize'>#{packetSize}</span><input class='packetSize hiddenInput' type='text' value='#{packetSize}' /></td>" +
        "#{yearCells}" +
        "<td class='total'>#{localStock}</td>" +
        "<td class='inventoryUpdate'><input class='inventoryUpdate' type='button' value='Update'/></td>" +
        "</tr>");
...
...
    //For every variety in the object array, add a row to the table
    tableString += this.varietyRowTemplate.evaluate(variety);

然后我将容器的innerHTML 设置为表字符串

tableContainer.innerHTML = tableString;

对于一个包含 2,000 行、每行 15 个单元格、每行约 10 个输入元素以及约 15 个跨度标签的表,这需要我一分多钟的时间。

是否有一种更快的方法来生成和填充大型表?我是否应该放弃一次显示所有 2,000 行并将其分成几页的尝试? (注意 - 在加载时一次增加表 25 行是不可接受的,因为最后一个元素仍需要一分钟才能加载)。


我要做的就是将数据存储在浏览器上(这很简单),然后一次显示一个大约 100 行的表格。使用 Array.sort() 按列对数据进行排序(为不同数据类型传递一个排序函数),并记住您所在的页面,这样它就不会总是重置为顶部或底部。我已经使用 5K 行数据轻松完成了此操作,而且速度快如闪电。

我使用的另一个技巧是使用单个表行和每列一个 TD。然后,我用一堆数据容器填充每个 TD,并注意确保它们具有相同的高度。这会产生一个假表,但如果你做得正确,用户就无法分辨出差异。它比渲染所有这些行快几个数量级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建大型表时的 JavaScript 性能 的相关文章

  • 使用 IE 11 和 AngularJS 的 2 路数据绑定问题

    我最近在使用 AngularJS 的 Web 应用程序上构建了一个功能 但在 IE 11 上遇到了一些问题 apply 将数据更改写入 DOM 由于某种原因 这种情况仅有时发生 而当我尝试调试问题时却从未发生 这使得它看起来像是一个计时问题
  • 角度单元格 xlsx 着色

    我有一个问题 我想根据一个值在我的 exel 行中添加红色或绿色来下载 如何在工作表中设置指定单元格的颜色 这是处理 exel 格式的 ts 类 表达 import Injectable from angular core import a
  • Javascript 字符串/整数比较

    我在 HTML 中存储一些客户端参数 然后需要将它们作为整数进行比较 不幸的是我遇到了一个我无法解释的严重错误 该错误似乎是我的 JS 将参数读取为字符串而不是整数 导致我的整数比较失败 我生成了一个错误的小例子 我也无法解释 运行时以下返
  • 客户端 GitHub 身份验证

    我正在使用 Javascript 对 GitHub 进行基本身份验证 例如 以下 shell 命令从 Github 获取令牌 curl i u uaername password k d scopes repo https api gith
  • 如何使用React Native在屏幕上绘图?

    我正在尝试在 React Native 中实现一个 Android 绘图应用程序 我正在使用 PanResponder 但我不知道如何获取用户触摸的部分的坐标 我尝试过使用react native svg但我不知道该放在哪里PanRespo
  • 禁用拉斐尔论文上的浏览器上下文菜单

    我有一篇拉斐尔论文定义为R1 Raphael 0 0 800 600 我想在本文中禁用上下文菜单 以便我可以捕获鼠标右键单击事件 我没有这样的Raphael someDiv 800 600 禁用 div 的 oncontextmenu 属性
  • Taglib:性能和崩溃问题

    我在 Qt 应用程序中使用 taglib 库 1 7 2 从音乐文件夹中读取 mp3 文件的一些元数据 问题是我发现它非常慢 例如 这是代码 QString path C Music QDir d path QStringList file
  • “内存泄漏”剖析

    从 NET 角度来看 什么是内存泄漏 https en wikipedia org wiki Memory leak 如何确定您的应用程序是否存在泄漏 有什么影响 如何防止内存泄漏 如果您的应用程序存在内存泄漏 当进程退出或被终止时它会消失
  • GraphQL 错误字段类型必须是输入类型,但得到:

    这是突变 const createNotebook mutationWithClientMutationId name CreateNotebook inputFields token type GraphQLString details
  • 将“http://”添加到尚未包含“http://”的 URL 前面

    我有一个input保存 URL 的字段 我希望这个保存的输入能够识别变量开头不存在 Http 但不知道从哪里开始 是否可以仅检查字符串的一部分 然后有一个在必要时追加的函数 如果您还想允许 https 我会使用如下正则表达式 if http
  • 在 ReactJS 中更改 URL onClick

    在我的项目中我有一个TabComponent它显示 3 个选项卡 首页 热门 全部 现在 我正在使用context反应维持 activetab它存储当前选项卡 toggleTab改变的方法activetab using setState 选
  • Java Reflection:为什么这么慢?

    我一直避免使用 Java 反射 因为它速度缓慢 我在当前项目的设计中达到了一个点 能够使用它将使我的代码更具可读性和优雅性 所以我决定尝试一下 我只是对这种差异感到惊讶 我注意到有时运行时间几乎延长了 100 倍 即使在这个简单的例子中 它
  • 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢

    我很难理解为什么 GPU 和 CPU 速度在小规模网络中相似 CPU 有时更快 而 GPU 在大规模网络中更快 问题底部的代码在 i7 6700k 上运行时间为 103 7 秒 但使用tensorflow gpu 时 代码运行时间为 29
  • 从组件刷新/重新加载 ember 路由

    我有一个组件 它实际上是一个模式对话框 当我完成该对话框并按 确定 按钮时 我想留在打开该对话框的停留页面上 这并不难 但问题是该对话框更改了数据 我通过 REST 调用获取数据 因此我需要刷新已经所在的路线以反映数据更改 因为我是从组件中
  • HTML 画布从 getImageData 返回“偏离一些”字节

    我找到getImageDataHTML 画布似乎返回不正确的字节值 我使用以下 Python 代码生成了 1x1 px 图像 from PIL import Image import numpy as np a np array 12 18
  • execCommand 的替代品

    我希望创建一个所见即所得编辑器 使用 jQuery 作为框架 我可以使用不同的方法来简化生产 我现在确实有一个正在工作的编辑 而且运作良好 我使用 iFrame 并将其设计模式设置为打开并从那里开始 然而 有一些事情困扰着我 以更改所选文本
  • Javascript - HTML Canvas 上的 Gecko 边框半径自适应(CSS border-radius)

    我试图弄清楚如何将 border radius css 属性的行为重现到 HTML 画布中 所以我已经在 J avascript 中做了一些事情 以便使用特定的半径 对于每个角 来计算给定形状的正确边界 如果需要的话 这是上一个问题 Gec
  • Javascript - 通过键获取特定 JSON 数组元素内的属性值

    我有一个像这样的 JSON 结构 map key1 valueA1 key2 valueA2 key3 valueA3 key1 valueB1 key2 valueB2 key3 valueB3 key1 valueC1 key2 val
  • 如何拦截javascript中innerHTML的变化?

    我需要拦截网页内单元格内容的任何更改 以下代码显示 addEventListener 不起作用 function modifyText alert var el document getElementById mycell el inner
  • 为什么变量 1 += 变量 2 比变量 1 = 变量 1 + 变量 2 快得多?

    我继承了一些 Python 代码 用于创建巨大的表 最多 19 列宽 5000 行 花了九秒用于在屏幕上绘制表格 我注意到每一行都是使用以下代码添加的 sTable sTable n GetRow where sTable是一个字符串 我将

随机推荐

  • 在轴顶部绘制标记

    我正在尝试使用 numpy 制作 x y 散点图 现在 轴从 0 0 开始并延伸以与数据范围对齐 我需要绘制位于 x 0 线上的两个点 目前看来 符号是在轴之前绘制的 随后被轴截断 我希望它出现在轴的顶部 我相信我可以用 标签 做一些事情
  • 关于通过字符类进行子集化的快速问题

    我认为这是一件非常快的事情 但我想我会问 因为我一辈子都不记得该怎么做 假设 我有一个 data frame 称之为 DF 具有以下标题 Blah Bleh and Meh 我还有一个字符类向量foo 其元素与标题相同DF Blah lt
  • 文本周围有黑线

    如何在我的textView 的文本周围制作黑线 上图示例 扩展 TextView 类 然后在onDraw中 先使用黑色绘制文本 然后再次绘制 稍微小一点并使用白色 为了获得额外的 正确性 请向 XML 添加自定义属性以设置 周围的 线 颜色
  • 是否可以将环境变量添加到 MongoDB 配置文件中?

    我正在使用 YAML 语法配置 MongoDB 副本集 但是 我想使用 MONGODB HOME 环境变量指向数据库 storage dbPath ENV MONGODB HOME data db 我尝试过使用 等 但没有成功 可以这样做吗
  • 安装 Joomla 时出错

    在我的本地 xampp 中安装并配置 Joomla 1 5 CMS 我安装完之后 当我访问 Joomla 网站时 它显示一些错误消息 Strict Standards Non static method JLoader import sho
  • Intellij Idea可以自动阶段更改吗

    经过几天的任务处理后 我决定看看已经完成了哪些工作git status来自 Git Bash 有些文件在Changes to be committed list 有些在Changes not staged for commit 有趣的是 我
  • Hibernate 4.2,双向@OneToOne 和@Id

    我正在尝试使用OneToOne添加可选数据的关系 ExtraData 到主类 MainItem 的所有实例ExtraData应该链接到一个实例MainItem 但并非所有实例MainItem需要有一个实例ExtraData 我主要对单向关系
  • 安装时 Chrome 扩展显示 CRX_REQUIRED_PROOF_MISSING

    我刚刚创建了一个供公司内部使用的 chrome 扩展 我不想发布它 而是想传递给我的同事 当我将该扩展打包到本地 chrome 中时 它给了我错误消息 CRX REQUIRED PROOF MISSING 您无法分发 Chrome 扩展程序
  • 如何在磁盘或数据库上存储稀疏可查询矩阵?

    我需要在磁盘上存储稀疏矩阵 它就像一个拥有数百万行和数千列的数据库表 其中许多或大多数列为空 它需要是可查询的 就像在某些列上带有 WHERE 的 SQL SELECT 一样 我的具体要求是Java 我首先想到使用Java 版 Berkel
  • 防止某些孩子影响 MouseEvent hitbox

    我有一个影片剪辑 用作按钮 在该影片剪辑中 当鼠标悬停在按钮上时会显示一个大阴影 我的问题是 这个阴影会影响鼠标悬停 并导致 mouseOver 和 mouseOut 事件的 捕获 区域比我想要的大得多 我尝试过禁用该子项上的鼠标事件以及我
  • Paging 3 - 如何处理自 beta01 以来出现的旧 APPEND RemoteMediator 请求?

    自版本以来beta01的 Paging 3 当从 a 刷新 PagingData 时RemoteMediator 有时会发生旧的APPEND刷新完成后 仍会执行上一代的请求 这似乎是预期的行为这次提交 https android googl
  • libgit2如何获取当前目录的状态?

    如何获取单个目录而不是整个存储库的状态 我查看了以下内容 git status list new它获取存储库状态 但我只关心位于单个目录中的文件 git status file获得单身状态 有没有办法可以使用 libgit2 获取单个目录的
  • DataGridView.Clear()

    麻烦来了 我想从 datagridview 中删除所有行 这就是我添加行的方式 private void ReadCompleteCallback object clientHandle Opc Da ItemValueResult res
  • 否定验证码 - 帮助我更好地了解垃圾邮件机器人

    我必须决定一种技术来防止垃圾邮件机器人注册我的网站 在这个问题中 我主要问的是负面验证码 我开始了解机器人的许多弱点 但想了解更多 我在某处读到大多数机器人不渲染 支持 javascript 为什么会这样呢 如何测试访问程序无法评估 jav
  • 当 JDBC 中没有明确说明时,h2 的默认用户名和密码是什么?

    我通过一个程序创建了一个 H2 数据库 而没有在 JDBC URL 中指定任何用户或密码 现在我尝试使用脚本工具访问该数据库 医生说使用 user sa在默认情况下 这不起作用 如果我添加它仍然不起作用 password sa或删除 use
  • chrome.alarms 返回未定义

    早上好 巫师们 我正在尝试自己编写铬浏览器的扩展 铬的版本是18 0 1025 151 development build 130497 Linux Built on Ubuntu 12 04 running on Ubuntu 12 10
  • 非 UI 片段与单例

    我猜非 UI 片段的主要目的是存储配置更改时保留的数据 对吗 那么 除了这个存储特定于拥有这个片段的 Activity 之外 它相对于整个应用程序中的单例模式的使用的好处是什么 这是我迄今为止一直在做的解决方案 事实上 片段的作用域仅限于其
  • mingw gcc 上的 __uint128_t

    我正在尝试在 mingw gcc 下编译 c 程序 该程序正在使用一个 uint128 t整数 当我尝试在同一台 64 位机器上的标准 ubuntu gcc 下编译它时 它完美地工作了 但是 当我尝试在 mingw 下为 Windows 编
  • 无法弄清楚如何使用 AppleScript 实现 REGEX

    我编写了一个正则表达式命令来查找并输出字符串中一行数字的第一个实例 find d d replace 1 问题是 为了在 AppleScript 中实际利用它 我知道的唯一方法是调用 shell 脚本并使用 sed 我不知道如何以这种方式实
  • 创建大型表时的 JavaScript 性能

    我有一个数据库表 我希望用户能够通过 Web UI 修改该表中的值 因此 我让后端检索表的值 通过 JSON 将它们传递给我的 Javascript 我的 Javascript 构建表示表行的对象 然后使用原型模板从数据生成 HTML 表行