使用javascript检测设备CPU/GPU性能?

2024-01-13

(这个问题并不特定于 Three.js,但我会用它作为例子)

我最近一直在使用 Three.js 开发 Web 应用程序界面,并在 WebGL 和 Canvas 渲染器(针对桌面浏览器)之间编写了一些不错的后备程序。

但现在的问题变成了如何正确检测设备能力,问题有两个方面:

  1. 浏览器功能(静态功能,如 webgl/canvas):这在很大程度上是在 Web 社区中使用简单的功能检测来解决的。
  2. 设备能力:这是困难的部分,在无法直接访问设备的硬件信息的情况下,我们需要一些方法来判断是否应该回退到对硬件要求较低的代码。

一个值得注意的例子:Firefox mobile/Opera mobile 声称支持 WebGL,但存在缺陷或受设备硬件限制。

到目前为止我想出的一些解决方法:

  1. 使用共同特征作为性能指标- 例如,触摸设备的硬件通常功能较弱。缺点:它不是面向未来的。
  2. 将已知有问题的浏览器/设备列入黑名单- UA 嗅探将是不可避免的,并且可能很难维护。
  3. 性能测试- 因此问题是,除了运行代码和测量帧率之外,还有更好的选择吗?

或者也许不必这么难,还有其他建议吗?


我最终在一个项目中使用了性能测量方法,我们希望利用高规格 CPU/GPU 桌面以及低速设备(例如桌子和手机)上可用的画布功能。

基本上,我们从最小的场景复杂性开始,如果渲染循环花费的时间少于 33 毫秒,我们会增加复杂性(如果渲染循环稍后开始花费太长时间,我们也会降低复杂性)。

我想在你的情况下,你可能需要运行快速的 canvas 和 webgl 性能测试,然后选择一个。花了一些时间研究这个问题后,我还没有遇到一些棘手的非显而易见的技术可以更好地解决这个问题。

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

使用javascript检测设备CPU/GPU性能? 的相关文章

  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • ElectronJS ReferenceError:导航器未定义

    我正在尝试在电子上制作自定义标题栏 但是当我启动我的应用程序时 我遇到了 ReferenceError 导航器未定义 问题 请帮忙 这是我的 main js 中的代码片段 My Codes https i stack imgur com c
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何访问另一个 mobx 商店中的 mobx 商店?

    假设以下结构 stores RouterStore js UserStore js index js each of Store jsfiles 是一个 mobx 存储类 包含 observable and action index js只
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 使用 html5 分块上传文件

    我正在尝试使用 html5 的文件 API 分块上传文件 然后在服务器端用 php 重新组装它 我正在上传视频 但是当我在服务器端合并文件时 大小增加了 并且它变成了无效文件 请注意 以下 html5 代码仅适用于 chrome 浏览器 在
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • 电话号码上未拾取结构化数据

    我在网站上有以下代码片段 当我通过 Google 结构化数据测试工具运行此程序时 它不会获取电话号码 我不确定我哪里错了 div class telephone number p Call Us a href 07749 918 143 a
  • 一旦 webapp 添加到主屏幕,是否可以强制 iphone/ipod 更新 apple-touch-icon?

    我使用 safari 的所有推荐链接和元标记创建了一个网络应用程序 例如
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 如何对单个 TypoSript 对象生成进行基准测试?

    我想对单个 TypoScript 对象生成进行基准测试以控制性能 是否可以使用某些 stdWrap 方法 我想要对其进行基准测试的 TS 对象示例 Test 1 page 10 RECORDS page 10 tables pages so
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • span 和 iframe 正文中的宽度(以像素为单位)

    我需要知道 a 的宽度 nbsp 以像素为单位 以及是否取决于字体大小 另外 页面中不同元素的情况是否有所不同 还有 就是 nbsp 与常规不同 目的 nbsp 不间断空格 位于正常空格之上是为了防止单词之间出现换行 您可以使用多个 nbs

随机推荐

  • Python Facebook API - 光标分页

    我的问题涉及学习如何使用 Facebook 的 Python API 检索我的整个好友列表 当前结果返回一个具有有限数量好友的对象以及指向 下一页 的链接 我如何使用它来获取下一组朋友 请发布可能重复的链接 任何帮助将不胜感激 一般来说 我
  • Linux 中的 -emit-llvm

    我是 LLVM 的新手 尝试在 Linux 上生成人类可读的 ll 文件 我安装了 llvm gcc 但据我所知它只能生成汇编代码 S 选项 有什么办法可以得到类似于 llvm 在线生成的东西compiler http llvm org d
  • 使用 IIS 以纯文本形式提供不带扩展名的文件

    我尝试过使用来自的答案IIS 如何提供没有扩展名的文件 https stackoverflow com questions 19950882 iis how to serve a file without extension
  • 对象引用和对象哈希码之间的区别

    java中对象的引用和同一对象的哈希码值有什么区别 它们是完全不同的两个概念 Cat oldCat new Cat Cat newCat new Cat Cat oldCatRef oldCat 在上面的例子中 oldCat and old
  • 在 SQL 输出中插入双引号

    例如 在运行查询并查看输出后 select from People 我的输出如下 First Last Email Ray Smith email protected cdn cgi l email protection 我如何导出这些数据
  • 如何使用 JavaScript 检查文件是否存在?

    如何使用 JavaScript 检查文件是否存在 在本例中我想检查的是 xml 文件 如果您使用的是 jQuery 您可以尝试加载该文件 ajax type GET url some xml success function found e
  • 如何强制 pytest 写入颜色输出?

    即使在写入管道时 如何强制 pytest 以颜色显示结果 似乎没有任何命令行选项可以执行此操作 从 2 5 0 开始 py test 有这个选项 color yes 从 2 7 0 开始 还应该可以执行以下操作 export PYTEST
  • Spring 与 JSF 2 的比较 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何两两比较多次测量的增减?

    我有一个数据 我想通过取差值来两两比较测量值 如果差值大于 0 2 则添加另一列为 是 否则为 否 就像图像中的示例数据一样 并且 在每个人的最后 如果至少有一个 是 则最终结果为 是 我已手动填写第一行 但我想对我的所有个人 1000 个
  • Python 并删除列表列表中的重复项,无论列表中的顺序如何

    我已经搜索过 但没有找到与我相同的问题 我想从 python 中的列表列表中删除重复项 但是 我不在乎列表中值的顺序 我目前的做法太耗时了 我想做的事 A 1 2 3 2 3 4 3 4 5 3 2 4 我想搜索 A 并删除所有重复项 这里
  • 使用python同时向多个CC和多个TO收件人发送电子邮件

    分别尝试了多个 to 和多个 cc 效果很好 但是当我尝试两者时 出现错误 File 路径 Continuum anaconda2 envs mypython lib smtplib py 第 870 行 在 sendmail sender
  • std::string 用 bool 初始化

    考虑以下初始化 std string falseString false std string trueString true With g 5 2 0 编译器会抛出警告falseString 而错误为trueString With cla
  • 需要使用 R 从字符串列中提取单个字符

    背景 下面是我的gamedatadput 形式的数据集 它包含一些 MLB 比赛的比分 structure list team c NYM NYM BOS NYM BOS linescore c 010000000 10 1140006x
  • 如何在 Dhall 中将动态命名记录与静态记录合并?

    我正在 Dhall 中创建 AWS Step Function 定义 但是 我不知道如何创建他们使用的通用结构Choice如下例所示 Not Variable type StringEquals Private Next Public Th
  • 如何保存并添加游戏中获得的数值?

    我正在为我的游戏制作一个商店 我正在制作一个系统 我在游戏中获得的分数被保存 每次玩时它也会添加和保存 但这最后一部分不起作用我不知道为什么 我从另一个名为的脚本中获取一个变量score它收到我得到的值 并且必须将其添加到以前的值 但它不会
  • 如何计算销售范围内的排名

    如何计算销售级别定义的类别内的排名 假设我们希望将销售额高于某个阈值的产品标记为 高 类别 将低于该阈值的产品标记为 低 类别 这是一个示例数据 let Source Table FromRows Json Document Binary
  • 将 Vuetify 工具提示 (v-tooltip) 组件与外部激活器(即未包装)一起使用

    我了解如何使用 Vuetifyv 工具提示 https vuetifyjs com en components tooltips introduction工具提示包裹着组件 但是 我不太确定如何将激活按钮放在外面 例如我有这个 非工作代码
  • request.getServletPath() 从 Spring MVC 返回 null

    我做了一个过滤器来捕获HttpServletRequest所有请求的 servlet 路径 Override public void doFilter ServletRequest req ServletResponse res Filte
  • react-native-multiple-select 存储提交时选择的项目

    我正在使用react native multiple select并尝试创建一个下拉菜单 允许用户选择多个选项 然后将他们选择的选项记录到数组中 目前 我的代码是 onSelectedItemsChange selectedItems gt
  • 使用javascript检测设备CPU/GPU性能?

    这个问题并不特定于 Three js 但我会用它作为例子 我最近一直在使用 Three js 开发 Web 应用程序界面 并在 WebGL 和 Canvas 渲染器 针对桌面浏览器 之间编写了一些不错的后备程序 但现在的问题变成了如何正确检