jQuery循环阻塞站点(socket.io数据)

jQuery循环阻塞站点(socket.io数据),jquery,Jquery,我正在使用socket.io将数据推送到浏览器,以更新其他成员的状态(例如:在线/离线/外出/忙碌) 我发现处理页面的数据何时到达(每10秒一次)会挂起一小会儿。例如:浏览器滚动条(如果您向上/向下移动)将停止片刻并没有响应 我认为问题不在于WebSocket,因为如果我不处理数据(例如:数据仍然到达浏览器),浏览器就不会挂起。它只在我处理数据时挂起 下面是我用来处理数据的循环: 我知道我可以更好地定位要更新的元素,而不是使用一般的查找(我会这样做),但我仍然非常惊讶这段代码在使用时会导致站点暂

我正在使用socket.io将数据推送到浏览器,以更新其他成员的状态(例如:在线/离线/外出/忙碌)

我发现处理页面的数据何时到达(每10秒一次)会挂起一小会儿。例如:浏览器滚动条(如果您向上/向下移动)将停止片刻并没有响应

我认为问题不在于WebSocket,因为如果我不处理数据(例如:数据仍然到达浏览器),浏览器就不会挂起。它只在我处理数据时挂起

下面是我用来处理数据的循环:

我知道我可以更好地定位要更新的元素,而不是使用一般的查找(我会这样做),但我仍然非常惊讶这段代码在使用时会导致站点暂时挂起

发送的数据将是大约100个用户/状态更新,因此我假设它将循环100次,并且必须搜索DOM 100次。这就是它挂起来的原因吗?它不会在后台处理这个吗


我想我是想弄明白为什么会发生绞刑。我经常使用jQuery,但从未经历过这种挂起。所有建议/想法都将不胜感激。

浏览器中的Javascript是单线程的。因此,一次只运行一个Javascript线程。如果您有一些代码正忙于处理传入的webSocket消息,那么在该代码完成之前,其他Javascript无法运行

Javascript通过将所有内容通过一个。当一段Javascript完成运行时,JS引擎从事件队列中提取下一个事件并运行它

如果当传入消息到达时,页面显示挂起很短时间,那么这可能是因为处理该传入消息的Javascript占用了太多时间,并使页面上的其他交互等待处理完成。最好的解决方案是提高处理这些传入消息的代码的性能,使其足够快,对页面的交互性没有明显的影响


没有一种通用的方法可以加快代码的速度——最大的区别完全取决于特定的代码、它是如何编写的以及它试图完成什么。因此,只有向我们展示实际的代码并描述它需要完成的任务,您才能收到关于改进代码的更具体的建议。如果您不想注意到执行100次操作的累积延迟,那么连续执行100次操作意味着每个操作必须非常非常快(每个操作不到几毫秒)。

可能是非常长的函数名和类/ID?我知道没有正常的,但我更喜欢它们。以前他们没有遇到过这个问题…我只是开玩笑,长名字与此无关,但在…上使用这么长的名字似乎太过分了。。。一切!难道你不厌倦了打字吗?难道它们不更难记住吗?问题是,有多少个
statusUpdates
,你在循环中更改DOM,为很多元素添加类和属性,如果像这样递归地更改DOM,就会挂起UI。我听说。。。每分钟可能有大约100个状态更新。。。也许我会寻找一个不同的解决方案,所以我只需要处理状态的变化——目前我只是更新每个用户的状态,而不仅仅是那些已经改变的用户。我认为这是可以的,但显然不是——边学边用……试着通过分析javascript来发现问题。