html元素的数量是否有任何限制,浏览器可以毫无问题地显示?

时间:2010-07-04 11:29:26

标签: html memory-leaks limit

基本上我有一个巨大的表,当用户向下滚动时会变得更大(自动预加载后续行)。在某些时候,浏览器变得迟钝,它开始挂起片刻,因为我点击或尝试滚动,它变得越来越慢,它获得的行越多。我想知道页面可以容纳的元素数量是否有任何限制?或者也许只是我的javascript泄漏到某处(虽然我只有一个事件处理程序,附加到表的tbody - 以及一个解析冒泡的mousedown事件的脚本)。

更新:在加载了数千行后,延迟变得明显。滚动本身的速度是非常可以忍受的,但是例如突出显示所点击的行(在tbody上的单个事件处理程序的帮助下)是痛苦的(它需要至少2-3秒并且延迟随行数增加)。我观察到所有浏览器的延迟。这不仅仅是我,而是几乎每个访问该页面的人,所以我猜它在某种程度上会影响到每个平台。

更新:我在这里提出了一个简单的例子:http://client.infinity-8.me/table.php?num=1000(你可以传递你想要的任何数字 num ),基本上它会渲染一个表格 num 行,并且有一个附加到父表的事件处理程序。我应该从中得出结论,由于子元素的数量,实际上没有明显的性能下降。所以它可能是其他地方的泄漏:(

11 个答案:

答案 0 :(得分:6)

您应该关注的另一件事是表格大小调整。如果您的表格使用table-width:auto;设置样式,则浏览器必须测量表格中的每个元素以确定其大小。这可能会非常缓慢。

相反,请使用table-width:fixed选择固定宽度或至少为表格设置样式。

答案 1 :(得分:4)

如果你在每个表行上都有JS,那么旧计算机将无法处理。对于HTML本身,你不必担心。

你应该担心普通人不喜欢大桌子的事实,这就是为什么做分页。使用分页将其分开以获得更好的可用性或其他问题。

想想没有页面但只有一个大页面的书,你想阅读吗?即使你的眼睛(在我们的情况下是PC)也可以处理它。

答案 2 :(得分:4)

我认为标准没有定义限制。在每个浏览器实现中可能存在硬编码限制,但我认为这个限制很可能是数十亿个元素。另一个限制是可寻址内存的数量。

解决您的问题:除了在向下滚动时自动加载元素,您还可以自动卸载已从屏幕上滚动的元素。然后,即使滚动很多,你的程序仍然会保持快速。

您可能还想考虑其他界面,例如分页。

答案 3 :(得分:0)

我认为没有限制。 但是,HTML文件越长,您的计算机所需的资源就越多。但桌子必须非常大......

答案 4 :(得分:0)

该限制实际上取决于所使用的用户代理和客户端计算机。 HTML与XML一样,是一种树格式的数据。因此,越多的元素,客户端浏览器必须通过树进一步搜索以呈现页面。

我在向div添加超过100个表时遇到了问题(作为IE6的旧解决方法,无法动态创建表元素)。

答案 5 :(得分:0)

您使用的浏览器是什么?有些浏览器可以比其他浏览器更好地处理事情 - 例如,如果你使用IE浏览器,我不会感到惊讶,如果它是缓慢的 - 它不会处理javascript事件以及基于webkit的浏览器。

另一件事显然是你的电脑(RAM和CPU)。但说实话,大多数计算机应该没有问题,除非我们说10000多行...甚至那时......

你可以发布一些代码吗?

答案 6 :(得分:0)

鉴于存在大量浏览器和渲染引擎,并且都具有不同的性能特征,并且考虑到这些引擎在性能方面得到稳步提升,并且计算机硬件始终变得更快:没有固定的上限是什么浏览器可以处理。但是,特定版本的浏览器的特定硬件目前存在上限。

如果您没有更多地定义您的硬件和浏览器很难帮助您。此外,如果您不发布代码,没有人可以就您的Javascript的可能性能提出任何建议。即使它只是一个事件处理程序,如果它无限循环或者它为每个元素调用它,它可能会大大减慢渲染过程。

答案 7 :(得分:0)

没关系RAM或CPU使用率,文件预加载后的实际大小是多少?

如果你的表真的那么大,你可能会强迫你的用户下载数兆字节的数据 - 我发现有些机器在2-4MB数据后会挂起。

答案 8 :(得分:0)

取决于。例如,在加载所有内容之前,IE不会开始渲染表。因此,如果你有一个5,000行表,它需要在渲染任何数据之前加载所有5,000行数据,而其他浏览器一旦有部分数据就开始渲染,并随着表的增长调整一点(如果需要)。

一般来说,渲染会随着节点数量的增加而减慢,但节点的复杂性也会变慢......避免使用嵌套表,如果可能的话,尝试将大表分解成块...例如。每100行(如果可能)

答案 9 :(得分:0)

世界上没有理由在单个页面上发布整个庞大的数据集。如果要求是为用户提供所有数据,那么您应该将其导出到一个文件,该文件可以被一些比浏览器更好的软件读取。

相反,我建议您创建一个AJAX驱动的页面,让用户看到一部分数据,如果需要查看更多数据,您只需下载该部分数据集并替换当前数据集。页。这是分页。谷歌搜索就是一个很好的例子。

答案 10 :(得分:0)

如果有任何限制,则取决于浏览器。但问题是你没有限制,因为浏览器仍然显示页面。

大表一直是浏览器的问题。渲染大型表需要花费大量时间。 因此,将大表拆分为较小的表通常是个好主意。

此外,您可能希望指定列宽。没有它,浏览器必须先下载整个表,然后才能计算每列的宽度并渲染表。如果在HTML代码中指定宽度,则浏览器可以在仍在下载时显示该页面。 (注意:指定整个表的宽度是不够的,您需要指定每列的宽度。)

如果使用Javascript将一行添加到一个大表中,浏览器很可能必须再次呈现整个表。这就是它变得如此缓慢的原因。如果您有较小的表,则只需要再次渲染一个小表。更好的是,如果你一次只加载一个子表而不是一行。

但最有效的方法是将数据拆分为多个页面。用户可能也更喜欢这样。这就是为什么谷歌在每个页面上只显示如此多的结果。