覆盖非活动选项卡的 setTimeout 行为

2023-12-02

我目前正在使用 WebRTC 在 JavaScript 中开发一个点对点游戏。它将其中一个对等点(即主机)视为服务器,而任何其他加入的对等点则通过 Node.js 代理服务器连接到主机。

我目前正在尝试解决以下问题:如果主机切换选项卡以使游戏不再是活动选项卡,则游戏会停止为所有人更新。经过一些研究后,我发现这是因为我正在使用类似的东西:

setTimeout(callback, 1000 / 60);

在我的游戏循环中。 setTimeout(至少在我关心的浏览器 Chrome 和 Firefox 中)的定义是,如果调用它的页面不在您的活动选项卡中,则每秒最多可以调用一次。

我读到 Web Workers 没有这个限制,但为了实现这一点,我需要在 Web Workers 中运行所有游戏逻辑。我尝试使用 JSON.stringify() 将游戏对象发送给工作人员,但它说该对象有循环引用(在游戏循环中),并且无法转换为 JSON。所以我不知道该怎么办。

我还考虑实现自己的计时器,无论页面是否位于活动选项卡中,该计时器都会继续运行,但我也不知道如何执行此操作。

只要不会产生很大的性能开销,我用这些方法,甚至是我还没有想到的其他方法都没有问题。任何建议将不胜感激。


因此,正如我上面所说,Web Workers 能够调用 setTimeout(),对于非活动选项卡不会有 1 秒的延迟。我的解决方案是创建一个 Web Worker,它只负责调用 setTimeout() (在其 onmessage 事件侦听器中调用)。然后,在每个游戏循环结束时我调用:

this.worker.postMessage(null)

可能有人会说,赋予 Web Worker 更多责任比仅仅调用 setTimeout() 更有效,因为我已经添加了等待主线程和工作线程之间发送消息的开销。这是我将来可能会考虑的事情。

这样做的主要问题是与 IE 的兼容性; IE 直到 10.0 版本才获得对 Web Worker 的支持。这对我来说并不是真正关心的问题,但我认为值得一提。

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

覆盖非活动选项卡的 setTimeout 行为 的相关文章

  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 如果对象包含在另一个数组中,则从数组中删除该对象

    我试图从数组中删除一个对象 如果该对象的属性 唯一 包含在另一个数组中 我知道我可以像这样执行嵌套 for 循环 for i 0 i lt array length i for j 0 j lt array2 length j if arr
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • 如何将函数内的捕获错误传递给父级

    我有这几行代码示例 想知道下面的逻辑到底如何 try var response child console log why here catch err console log should show this err function c
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas

随机推荐

  • 执行具有多个结果集的存储过程

    我正在使用 SSIS 2016 存储过程返回 4 个结果集 只有第一个结果集是相关的 需要写入表中 我无法修改存储过程 我不关心其他结果集中返回的任何数据 存储过程位于 SQL Server 2016 数据库中 结果也将驻留在 SQL Se
  • 是否可以在 Shiny 的条件面板中使用 uiOutput?

    我有一个非常基本的 Shiny 应用程序 我在用renderUI and uiOutput填充一个selectInput可以选择日期 但我只想这样selectInput当用户通过单选按钮选择一个选项时出现 就目前而言 应用程序单选按钮没有任
  • 在 ie10 中强制浏览器和文档模式为 ie9

    这段代码 似乎只将文档更改为ie9而不是浏览器 除了按 F12 并手动更改之外 还有其他想法吗 站点无法设置浏览器模式 在浏览器从站点请求内容之前选择浏览器模式 这指定了站点如何识别浏览器 例如 UA 字符串 正如您所提到的 文档模式可以由
  • DataSet TableAdapter 抛出 OVER SQL 构造或不支持的语句

    我有一个 t sql 查询写成这个示例帮助 SELECT t gName AS Product isnull SUM CASE WHEN t Col 1 THEN t Quantity END 0 AS 180ml isnull SUM C
  • 除了使用自适应卡之外,还有其他方法可以启用日历选项作为 V4 聊天机器人 C# 中的输入吗?

    有没有办法在聊天机器人中启用日期和时间输入 即日历选项 而不使用自适应卡 正如我从下面的链接中了解到的 除 Microsoft 渠道外 所有渠道均不支持自适应卡 如何使用 C 添加通过卡片内的提示选项显示的自定义选项以及在 BOT V4 中
  • Beautifulsoup 丢失节点

    我正在使用 Python 和 Beautifulsoup 来解析 HTML 数据并从 RSS 源中获取 p 标签 但是 某些 url 会导致问题 因为解析的 soup object 不包括文档的所有节点 例如我尝试解析http feeds
  • 如何更改实体框架生成日期时间 SQL 精度的方式

    我有一个表使用 id 和 DateTime 列作为 pk 但是当我尝试通过实体框架更新数据时 如下所示 using Entities context new Entities var item from item in context Ba
  • Objective C 类的默认基类

    这个问题的答案可能是显而易见的 但我需要确定 当类定义中没有显式定义基类时 所有目标 c 类是否共享一个公共的默认基类 不 如果您没有在类定义中显式定义超类 那么您将创建一个根类 From 可可核心竞争力 根类不继承自其他类 并定义其下层次
  • 如何修复使用 Graphicsmagick 收集的损坏的 alpha 通道(残留像素)的 .gif?

    我想将带有 Alpha 通道的 avi 转换为 gif 首先 我使用 ffmpeg i source avi vf scale 720 1 flags lanczos fps 10 frames ffout 03d png 将 avi 转换
  • 如何“解码”字体文件的eexec?

    我有一个 pfa 字体文件我想阅读渲染字体的 算法 然而 大部分信息都隐藏在二进制行中 currentfile eexec 743F8413F3636CA85A9FFEFB50B4BB27302A5F6C876586CCC1670A7EF5
  • 如何在 PHP 中请求 facebook 权限?

    如何在 PHP 中请求 facebook 权限 你能给我举个例子吗 thanks 假设你有用户的access token 你可以通过 facebook gt getAccessToken 用户登录后 try permissions face
  • 推送消息不使用分布式证书发送

    我可以使用沙箱使用开发人员 p12 文件发送推送通知 但我在应用程序商店上的应用程序 我使用与 gateway push apple com 消息一起使用的分发证书 f12 文件无法到达设备 在分布式证书上激活推送通知服务 我检查了deve
  • 基于位置追踪的iOS全时后台服务

    我目前正在编写一个应用程序 该应用程序依赖于位置跟踪并将有关位置的数据发送到服务器 然而 问题是它必须 24 7 运行 目前我遇到每 2 3 天发生一次的随机崩溃 为了使应用程序在后台持续运行 我所做的是将 NSTimer 放入 appli
  • 如何从标记存储在变量中的树中选择节点?

    考虑以下 XSLT 脚本
  • Windows 中 Git 克隆权限失败

    当我在 Windows 10 v 1909 上使用 CMD 或带有 ssh agent 的 PowerShell 从 GitHub 克隆时 显示以下内容 email protected Permission denied publickey
  • 如何动态改变网页的标题?

    我有一个网页 它实现了一组选项卡 每个选项卡显示不同的内容 单击选项卡不会刷新页面 而是在客户端隐藏 取消隐藏内容 现在需要根据页面上选择的选项卡更改页面标题 出于 SEO 原因 这可能吗 有人可以建议一个解决方案 通过 javascrip
  • 通过多索引的子集从 pandas 中选择行

    我在 pandas 中有一个多索引数据框 索引中有 4 列 还有一些数据列 示例如下 import pandas as pd import numpy as np cnames K1 K2 K3 K4 D1 D2 rdata pd Data
  • HTML - 阿拉伯语支持

    我有一个网站 我必须在其中添加一些阿拉伯语行 如何做到这一点 在哪里获取阿拉伯文本字符 如何使页面支持阿拉伯语 我必须每页放一行 而且有很多页面 所以不能四处制作图像并放置它们 这是所需的答案 但每个人都只回答了其中的一部分 Step 1
  • MySQL 从一个表中选择不在另一个表中的特定条目

    当尝试从表中选择不在另一个表中的特定条目时 我在 MySQL 中遇到问题 我知道这句话听起来很疯狂 但这是我想做的一个例子 表用户 user id username password plus other columns not impor
  • 覆盖非活动选项卡的 setTimeout 行为

    我目前正在使用 WebRTC 在 JavaScript 中开发一个点对点游戏 它将其中一个对等点 即主机 视为服务器 而任何其他加入的对等点则通过 Node js 代理服务器连接到主机 我目前正在尝试解决以下问题 如果主机切换选项卡以使游戏