【发布时间】:2014-03-03 22:11:40
【问题描述】:
“现代”,因为该定义可能会随着时间而改变(特别是我的意思是桌面浏览器)
“句柄”,因为这可能会因机器配置/内存而异,但具体而言,我指的是一般用例。
这个问题是在我试图解决涉及大型数据集的特定问题时想到的。
基本上,每当对特定数据集进行更改时,我都会取回完整的数据集,并且必须在浏览器中呈现这些数据。
因此,例如,通过 websocket,我收到一个推送事件,告诉我数据集发生了变化,然后我必须通过抓取现有 DOM 元素、复制它、使用来自此的数据填充元素来以 HTML 呈现此数据集使用类名或其他元素标识符进行设置,然后将其添加回 DOM。
请记住,此数据集中的任何对象 (JSON) 可能有多达 1000 多个子对象,并且可能有多达 10,000 多个父对象,因此您可以看到可能存在返回的实例数据集向上接近 1,000,000 => 10,000,000 个数据点或更多。
现在,当我必须渲染这些东西时,有趣的部分就来了。对于每个数据点,可能有 3 或 4 个标签用于渲染和设置数据样式,并且这些标签中的任何一个都可能有事件侦听器(可能在父容器上使用委托来减轻负担)。
总而言之,可能需要呈现大量传入信息,我正在尝试找出处理这种情况的最佳方法。
理想情况下,您只想渲染具有更改的单个数据点的更改,而不是重新渲染整个数据集,但由于后端的设计方式,这可能不是一个选项。
我主要关心的是了解浏览器/DOM 的局限性,并通过前端的镜头来看待这个问题。后端肯定会发生一些变化(数据设计、缓存、分页),但这不是这里的重点。
这不是 HTML/DOM 的典型用例,因为我知道存在限制,但它们到底是什么?我们仍然限制在大约 3000-4000 个元素吗?
我有很多 related subquestions 为此我是 actively looking up 但我认为与 stackoverflow 社区的其他成员分享一些想法会很好并尝试收集有关此问题的一些信息。
现代浏览器在开始变得缓慢/无响应之前可以处理的“合理”数量的 DOM 元素是多少?
如何对浏览器可以处理的 DOM 元素数量进行基准测试?
有哪些strategies 用于处理需要渲染的大型数据集(分页除外)?
像 mustache 和 handlebars 这样的模板框架在从 data/json(在前端)渲染 html 方面是否比使用 jQuery 或正则表达式更高效?
【问题讨论】:
-
大型台式机中存在“现代”浏览器,廉价智能手机中存在“现代”浏览器。客户端系统容量将成为您的限制因素。
-
如果数据集超过 10,000,000 个点,您应该重新考虑这个概念,一次只输出其中的一小部分,因为没有用户愿意在同一页面上浏览 1000 万个元素,或者所以我至少会这么想?
-
另外,DOM的方面是允许重复使用相同的元素,以HTML5 Canvas为例。 DOM 应该保持动态,并且“对象”应该保留在数据存储中,直到需要为止。在浏览器中达到某种关键元素之前,您更有可能受到错误代码和内存泄漏的限制。
-
@adeneo 我承认数据的设计方式存在问题,但这本身不是问题。对此有很多后端策略,但我想专注于前端解决方案/限制。
-
@Pointy 我更专注于尝试了解前端/客户端与 DOM 的局限性,而不是真正尝试解决这里的问题,这只是为了说明。
标签: html json performance dom