当我的网站打开多个选项卡时,为什么 setTimeout 会加速?

2024-01-09

我有一个每秒倒计时的计时器。它工作得很好,直到用户打开我的网站的 3 或 4 个选项卡,此时最新选项卡的计时器速度变为两倍或三倍。我目前只能在 IE8 中重现该错误。我之前使用的是 setInterval,并且也可以在 Firefox 中重现该错误。

我实际上使用的是 FBJS(Facebook 的 Javascript),所以我只给出一些伪代码。

function countDown() {
  ...
  setTimeout(function() { countDown() }, 1000);    
}

countDown();

然而,我真正寻找的是更多的理论。我知道浏览器可以尝试使用 setInterval 来“追赶”,但是多个选项卡如何导致 setTimeout 出现这种行为?


整个情况非常奇怪。我想到的唯一有意义的场景是浏览器试图“平滑”自我恢复 setTimeouts 的周期,与 setInterval 相同,而这样做的代码实际上混淆了不同窗口中的计时器其他。

我不知道这是否可行,特别是涉及 Facebook,但一个有趣的测试是为每个实例指定一个随机名称countDown函数并看看这是否有任何区别,例如:

<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
  ...
  setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);    
}

countDown<?php echo $timerTag ?>();

如果这改变了观察到的行为,那就证明了我想到的场景。 (并且可能提供解决问题的方法。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我的网站打开多个选项卡时,为什么 setTimeout 会加速? 的相关文章

  • 使用selenium IDE提取部分文本并将其放入变量中

    有人可以告诉我应该使用哪个命令来使用 Selenium Ide 从文本中仅提取数字 694575 并将其放入变量中以供进一步使用 这是带有文本的 div div class loginBoxTitle Edit Exhibition Cen
  • jQuery 中的 Javascript .files[0] 属性

    jQuery 中是否有与此语句等效的语句 var value document getElementById id files 0 使用附加 files 0 的标准 jQuery 选择器似乎不起作用 并且我找不到与 files 等效的 jQ
  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 如何在不配置的情况下更改 npm 前缀?

    我不小心将 npm 前缀更改为不存在的地方 是否有一个我可以访问的配置文件可以让我将其更改回来 我能想到的唯一选择是 完全卸载节点 更改前缀后 npm 没有响应 https stackoverflow com questions 39250
  • H264 中的 Elementary Stream 是什么意思

    我读了 Elementary Stream 的内容维基百科 http en wikipedia org wiki Elementary stream 我正在使用的工具 Live555 需要 H 264 视频基本流文件 因此 当从视频应用程序
  • 在Java中仅获取路径目录并丢弃文件

    我们如何实际丢弃 java 字符串中的最后一个文件并仅获取文件路径目录 用户输入的随机路径 C my folder tree apple exe 期望的输出 C my folder tree 我找到的最接近的解决方案来自here https
  • Dockerfile 中 VOLUME 的用途是什么

    我试图更深入地了解 Docker 的体积 但我很难找出以下方面的差异 用例 The docker volume create command The docker run v path host path The VOLUME条目在Dock
  • 移动 N 天活跃用户 (BigQuery)

    我有一个由两列组成的 事件 表 userId eventDate s234124 2015 01 01 a2s3166 2015 01 02 c216782 2015 01 03 z312235 2015 01 04 userId 是用户
  • 如何将“ON更新当前时间戳”添加到现有表列

    我有一个列 例如 ts activity 其数据类型为 MYSQL 时间戳 默认值为当前时间戳 我想添加更新应用当前时间戳到该列值 我无法通过更改查询来执行此操作 在创建新表及其列时 我可以添加该列 但无法通过添加更新应用当前时间戳来修改现
  • 将 ExpressionEngine 成员导出到 WordPress

    我需要将所有成员从 ExpressionEngine 站点导出到 WordPress 我该怎么办呢 将它们全部移动 包括所有密码等 似乎是一项艰巨的任务 关于如何开始有什么想法吗 如果是这种情况 用户在登录新的 WordPress 站点时必
  • 为什么pip从10版本升级到18版本?

    运行时pip install脚本我收到以下警告 You are using pip version 10 0 1 however version 18 0 is available 这很奇怪 pip项目刚刚从版本10升级到版本18吗 为什么
  • 使用 SQLBrite + Retrofit 刷新数据

    这是我的用例 我正在开发一个应用程序 它通过 REST API 与服务器通信 并将接收到的数据存储在 SQLite 数据库中 它将其用作某种缓存 当用户打开屏幕时 必须发生以下情况 数据从数据库加载 如果可用 应用程序调用API刷新数据 A
  • C 或 C++ 中的函数类型

    我有一个简单的问题 C 或 C 中的函数类型是什么 由于我们可以在 C 或 C 中拥有指向函数的指针 这意味着函数应该具有特定的类型 否则在函数创建期间进行类型检查就没有任何意义 有人可以解释一下我是否走在正确的道路上吗 如果我走在正确的道
  • 使用多个 baseurl 的 ES6 异步模块

    ES6 模块系统似乎非常适合统一 CommonJs AMD 语法 作为一个 requireJs AMD 用户 我想转换为 ES6 模块 目前使用 babel js 但似乎有一个问题 通读文档和教程 似乎无法加载依赖于多个 baseurl 的
  • WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素

    任何想法如何解决这一问题 UserService UserServiceClient userServiceClient new UserServiceClient userServiceClient GetUsersCompleted n
  • pandas,按函数分组后的列名称

    我有一个简单的 Pandas Dataframe 名为purchase cat df email cat 0 email protected cdn cgi l email protection Mobiles Tablets 1 emai
  • MongoDB 主机名/URI 配置

    请注意 这看起来很长 但提供了上下文并在底部列出了我的主要问题 我研究了所有部分并包括参考资料 我用的是 这在三个独立的虚拟机上创建了两个 Mongo 服务器 主服务器和辅助服务器 和仲裁器的副本集 我没有更改任何虚拟机配置 除了打开防火墙
  • 无法在 iPhone/iPod touch 的 Safari iOS 7 中隐藏导航栏

    我不相信有任何解决方案可以使用 javascript css html 以编程方式隐藏栏 但让我尝试描述一个问题 我们是移动游戏开发团队 我们开发一款游戏已经一年了 iOS 7 发布后 我们遇到了无法隐藏导航栏的问题 一旦用户点击 Safa
  • Rails:更改操作邮件程序中的默认发件人

    我正在使用 Rails 应用程序中的操作邮件程序发送电子邮件 但它只允许一个默认发件人 这是我的 UserMailer 类 class UserMailer lt ActionMailer Base default from gt emai
  • 停止线程:标志与事件[重复]

    这个问题在这里已经有答案了 我看到了例子例如这里 https stackoverflow com a 325528 4653485使用一个Event https docs python org 3 library threading htm
  • QML:无法将[未定义]分配给

    我正在尝试将 Qt Android 程序的界面从 QWidgets 重写为 QML 我之前从未使用过它 因此错误可能非常明显且愚蠢 新界面基于ListView 看起来像 ListView id listView x 16 y 146 wid
  • 如何在 XCode 4.3 中为仅限 iPhone 的应用程序指定 iPad Retina 图标?

    我的 iPhone 应用程序图标在 iPhone Retina 和 iPad 中显示良好 但在 iPad 视网膜 模拟器和设备 上 我得到一个图标 显然包含应用程序的开始屏幕 鉴于我的应用程序仅针对 iPhone 设计 而非 通用 因此 X
  • 当我的网站打开多个选项卡时,为什么 setTimeout 会加速?

    我有一个每秒倒计时的计时器 它工作得很好 直到用户打开我的网站的 3 或 4 个选项卡 此时最新选项卡的计时器速度变为两倍或三倍 我目前只能在 IE8 中重现该错误 我之前使用的是 setInterval 并且也可以在 Firefox 中重