java - 如何有意义地检测低规范的移动设备?

标签 java javascript html mobile

目前我只知道 Scientiamobile 的 WURFL 和其他一些。这些库或数据库告诉你很多关于设备的信息,但它们都不能清楚地表明你不应该使用 CSS 过渡或其他类型的动画,因为即使设备支持它,与这些功能完全不同的故事将顺利运行,这是我在构建移动 Web 应用程序时最关心的问题。

使用“WURF”数据库在这个方向上“分类”设备在技术上是否可行?以及我应该使用哪些设备功能将设备“分组”为“快速”的图形功能?

最后,我只需要从 1 到 5 对设备进行评分,以确定我可以使用哪些 gfx 操作。

好吧,欢迎任何想法。事实证明这是真正的脑筋急转弯,互联网上的研究除了大量有关设备上限的数据外并没有带来任何有用的信息。

Update-1:我刚收到 ScientiaMobile 的回复:“我们一直在尝试某种形式的 Javascript 性能指数(可能基于现有基准之一)的想法,它可以给出一些迹象,但我们还没有到达那里。问题很复杂。”

Update-2:我们在移动网络应用中发现的最大瓶颈

  1. 动画能力
  2. PNG 透明度
  3. 文本和框阴影
  4. 图像大小调整

对我们来说,确定我们需要禁用这些功能就足够了,因为它们会使任何应用程序瘫痪。可能还有其他方法。

谢谢。

最佳答案

不幸的是,我认为今天的一般情况下这是不可能的。

如果您只对有限数量的设备感兴趣,当然您可以测试每个设备并通过用户代理或基于 JavaScript 的检测专门针对这些设备。

在厚应用程序的上下文中(例如,您使用类似 Apache Cordova 的内容“包装”您的网站),可以提供对某些设备内部的 JavaScript 访问(例如,总内存量、可用内存量、处理器速度),否则,浏览器无法获取此信息。正如您所暗示的那样,访问此类设备信息可能仍然不够充分(例如,看似“高规范”的设备性能不佳)。

JavaScript 特征检测库,如 Modernizr可以回答用户当前浏览器是否支持 box-shadow 和 text-shadow 之类的东西,但不提供关于有多好有多快 将呈现受支持的功能。

同样,来自 Browserscope 的数据集及相关项目ringmark (有点类似于 WURFL 的 JavaScript)通过众包基准测试(例如,iPhone 是否支持 CSS3 转换?)针对每个浏览器版本回答这些浏览器支持问题,并针对一般情况,这是必要的。您需要针对有问题的各种功能运行基准测试并评估实时性能。然而,即使这样也有其局限性:

  • 由于移动用户四处走动、接听电话、更改硬件设置、启动后台应用程序等,速度的必要条件(可用内存、处理器、电池、网络连接等)不断变化,结果基准可能不可靠/不可重复。
  • 基准测试需要时间,并且总是会增加(希望不引人注意的)延迟。
  • 根据功能,基准测试可能不实用。
  • 在基准测试中,功能的组合(例如,用阴影为透明 PNG 制作动画)或按比例(例如,页面上的每个图像都在制作动画)可能会表现出不同的行为。
  • 如果您依赖基准测试数据集而不是执行自己的实时基准测试,那么数据集的样本量、范围和年龄会极大地限制其实用性。

最后一点是,我什至没有提到性能相当主观这一事实。假设以某种方式可以评估/预测动画的速度。如果动画将以 15 fps 运行,用户是否应该看到该动画? 5帧呢?谁将成为决定给定功能是否足够好的阈值的最终仲裁者?

我今天能提供的最好建议是暂时减少(或消除)您对麻烦功能的依赖。建议回到使用带有预合成阴影的图像或在没有 CSS3 的情况下制作背景渐变的“旧方式”似乎很糟糕,但归根结底,用户体验应该优先于使用 Shiny 的新技术。许多移动设备根本不存在,检测方法也不存在。如果您必须使用这些功能,或许可以考虑一种简单但不显眼的方式让用户选择加入/选择退出,例如 Gmail 的“标准”与“基本 HTML” View 选项,或者考虑为已知良好的浏览器自动选择加入.

关于java - 如何有意义地检测低规范的移动设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921481/

相关文章:

java - 找不到 Java 包 powermock.api.mockito

java - C#按位异或(^)与Java按位异或(^)对比

java - Java中XML节点的计数

javascript - 优化逻辑以部分匹配 2 个数组项

javascript - 如何将内部 div 居中?

javascript - 垂直内联的 Div 框

javascript - Bootstrap 与 Masonry

javascript - 使用 Protractor 在 HTML 表中添加行数 - 非 Angular

java - 将 AOSP 导入 Eclipse

javascript - 如何在两个onclick事件之间传递参数