Javascript 为什么我的浏览器在使用jQuery计算容器div中的子元素时会冻结?

Javascript 为什么我的浏览器在使用jQuery计算容器div中的子元素时会冻结?,javascript,jquery,performance,Javascript,Jquery,Performance,我正在使用此jquery甘特视图库生成甘特图- 生成甘特图后,我将执行以下jQuery代码来计算甘特图生成的html中的子元素: $('.ganttview-grid').children().length 但是它将浏览器冻结到大约40秒,并且容器中实际上没有太多子元素(这个div中大约有460个子元素,由$('.ganttview grid')识别) 有人能告诉我,有多少数据对于jQuery处理或读取来说太多了,或者有没有一种更快的方法可以在不冻结浏览器的情况下计算这些数据?我已经尝试了示例

我正在使用此jquery甘特视图库生成甘特图-

生成甘特图后,我将执行以下jQuery代码来计算甘特图生成的html中的子元素:

$('.ganttview-grid').children().length
但是它将浏览器冻结到大约40秒,并且容器中实际上没有太多子元素(这个div中大约有460个子元素,由
$('.ganttview grid')
识别)


有人能告诉我,有多少数据对于jQuery处理或读取来说太多了,或者有没有一种更快的方法可以在不冻结浏览器的情况下计算这些数据?

我已经尝试了示例页面:

而且你发布的脚本没有显示出任何问题(他们只有17个孩子)。通常,我使用jQuery检索包含数千或一万个元素的列表时不会出现任何问题。是否确实是这一行冻结了您的浏览器?请尝试在下面的行中放置一个回车符,以确保此调用后的某个位置不会出现问题

一般来说,使用DOM的速度很慢,但不会慢到让你感觉像是在检索500个元素。一个简单的加速方法是在绘制时存储这些元素,或者从起始数据推断这些元素。它们是传递给jQuery甘特来绘制和计算这些javascript元素的元素数,要快得多而不是解析生成的DOM。请尝试发布您的代码,我们可以为您提供帮助

上一次测试,我从未做过基准测试,也许这会更快:

$('.ganttview-block').length

希望这有帮助

您可以在每次生成子元素时向变量添加1。编写代码时最好不要冻结浏览器。感谢您的建议。是的,在变量中计数可能会起作用,没有想到那个愚蠢的我:-)。。。我会试试的。呃,最简单的解决方案总是那些你遇到问题时认为不合适的。如果有效,请选择ma答案;-)我在这里标记了awnser,因为它对我很有帮助。不过,我想确认一下,这对我的处境并没有帮助。我的冻结仍然存在,结果是我使用的另一行代码冻结了,该代码用于确定甘特容器中元素的顶部药剂。最终的解决方案是在这里进行甘特图的分页显示,而不是所有项目都以一次过的方式显示。向DOM中添加元素并不会导致冻结,但通过javascript进行更改或访问DOM元素实际上是导致冻结的原因。