【问题标题】:Are JavaScript timers immediately cleaned up when you close a browser tab?关闭浏览器选项卡时是否会立即清理 JavaScript 计时器?
【发布时间】:2014-01-17 09:17:15
【问题描述】:

假设我通过以下方式创建了一个计时器:

setTimeout()

(或者我正在使用setInterval()

虽然该计时器正在计时,但在它到期之前,我决定关闭正在执行该代码的浏览器选项卡。浏览器是否会在那时自动清理计时器(考虑到我没有调用 clearTimeout ())?

我想知道代码是否有可能在内存中停留足够长的时间,以至于当达到超时值时,它仍然可以执行代码。或者关闭选项卡是否意味着计时器从内存中删除,因此在setTimeout()中调用的函数将永远不会被执行。

【问题讨论】:

  • 我建议它会因浏览器而异,但例如对于 Chrome,选项卡本身就是一个过程;关闭时,它会从内存中删除。至于其他浏览器,我看不到将其保存在内存中的好处,但我不能肯定地说。
  • 在与其关联的浏览器窗口关闭后不会执行超时:“清理”(如在 GC'ed 中?)似乎不是一个实际问题,它本身就是一个实现细节。
  • @richieahb 是的,我想这对于不同的浏览器可能会有所不同。尽管您对 Chrome 的评价是有道理的。 user2864740 为此干杯。你碰巧有一个链接到我可以参考的地方吗?我需要将有关此问题的详细信息传递给一些同事。
  • @JasonEvans 不是直接的,尽管我认为 [documented] 答案直接位于 window 上下文/生命周期的范围内。

标签: javascript memory timer dispose


【解决方案1】:

setIntervalsetTimeout 是全局上下文(通过window 对象)方法。然后关闭选项卡或窗口,所有上下文都将删除。然后您打开新选项卡/窗口,所有上下文都将创建。

【讨论】:

    【解决方案2】:

    setInterval() 方法将继续调用该函数,直到调用clearInterval() 或关闭窗口。 setTimeout() 也是如此。您可以在关闭 3 秒后让 settieout 打开窗口。单击并关闭。您将看到该窗口不会弹出。

    See This

    【讨论】:

      【解决方案3】:

      SetInterval() 和 SetTimeout() 都是浏览器内置的调度程序。这允许设置函数调用以在给定的时间段后执行。

      SetTimeout() 可以通过 clearTimeout() 方法或在浏览器窗口关闭时取消。

      SetInterval() 方法与 setTimeout 具有相同的功能。可以通过 clearInterval 调用停止。

      setTimeout/setInterval 中使用的函数也在内部被引用并被跟踪直到完成,然后被清理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多