0

我有一个页面可以检查用户是否登录,如果没有登录,它会将他们重定向到登录页面,并且我在 Chrome 开发工具中的事件侦听器计数中遇到了一些奇怪的行为。

当用户被重定向到登录页面时,登录成功,然后重定向回主页,事件侦听器计数约为 6000。

当用户关闭选项卡,然后导航回主页(这次跳过登录屏幕,因为他们的会话仍处于活动状态)时,事件侦听器计数仅为 4000。

什么可能导致事件侦听器数量出现这种巨大差异?两次加载相同的页面,唯一的区别是会话已经建立......

已经有一个活动会话导致事件侦听器计数下降这么多是什么原因?

4

1 回答 1

1

时间线选项卡显示选项卡内存的当前状态,而不是页面内存。这意味着它不一定只包含当前网站分配的内存。如果您使用相同的选项卡访问了几个页面,则以前页面的垃圾可能仍然在选项卡内存中。

这就是为什么在新选项卡中您预计会有 4000 个听众,而在您曾经访问过的“旧”选项卡中'home page'->'login page'->'home page',您可以看到 6000 个听众。

您可以使用开发工具左下角的“垃圾箱”按钮强制进行垃圾收集。单击它后,您应该会看到听众数量下降。

Chrome 开发工具中的垃圾收集图标

顺便说一句,您的网页上有 4000 多个事件侦听器?这是很多。我还没有看到有超过 1000 个听众的页面(这个页面有 80 个,twitter 有 200 个,gmail 有 1000 个)。如果你没有在一些超级复杂的 webapp 上工作(比 gmail 复杂 4 倍),那么你做错了什么。如果您使用 jQuery,请确保您知道它是做什么$('ul').on('click','li',function(){})的。如果您使用的是 vanilla JS,请确保您已阅读有关事件冒泡以及它如何帮助您减少侦听器数量的内容。

于 2013-09-26T07:50:05.970 回答