不幸的是,我不认为今天一般情况下这是不可能的。
如果您只对有限数量的设备感兴趣,当然可以测试每个设备,并通过用户代理或基于JavaScript的检测专门针对这些设备。
在厚应用程序的上下文中(例如,您使用像Apache Cordova这样的东西“包装”您的网站),可以提供对某些设备内部的JavaScript访问(例如,总内存量,可用内存量,处理器速度),但除此之外,此信息无法从浏览器中获得。正如你所暗示的那样,访问这种类型的设备信息可能仍然是不够的(例如,看似“高规格”的设备表现不佳)。
像Modernizr这样的JavaScript功能检测库可以回答用户当前的浏览器是否支持诸如box-shadow和text-shadow之类的东西,但不提供有关支持的功能的渲染效果或速度的信息。
同样,来自Browserscope和相关项目ringmark的数据集(有点像WURFL的JavaScript类似物)通过众包基准测试(例如,iPhone是否支持CSS3转换?)在每个浏览器版本的基础上回答了这些浏览器支持问题,对于一般情况,这是必要的。您需要对所讨论的各种功能运行基准测试并评估实时性能。但是,即使这样也有其局限性:
- 由于速度的必要条件(可用内存,处理器,电池,网络连接等)随着移动用户四处移动,接听电话,更改硬件设置,启动后台应用程序等而不断变化,因此基准测试的结果可能是不可靠/不可重复的。
- 基准测试需要时间,并且总是会增加(希望不会注意到)延迟。
- 根据功能的不同,基准测试可能不切实际。
- 与基准测试中的单独功能相比,功能在组合(例如,用阴影对透明 PNG 进行动画处理)或比例(例如,页面上的每个图像都在制作动画)方面的行为可能不同。
- 如果您依赖基准测试数据集而不是执行自己的实时基准测试,则数据集的样本大小、范围和年龄会极大地限制其实用性。
最后一点是,我甚至没有谈到的是,性能是相当主观的。假设以某种方式可以评估/预测动画的速度。如果动画将以 15 fps 的速度运行,用户是否应看到该动画?那么 5 帧/秒呢?谁能成为最终的仲裁者,决定给定功能是否表现良好的阈值?
我今天能提供的最好的建议是暂时减少(或消除)您对麻烦功能的依赖。建议回到使用具有预合成阴影的图像或在没有CSS3的情况下制作背景渐变的“旧方法”似乎很糟糕,但归根结底,用户体验应该优先于使用闪亮的新技术。许多移动设备根本不存在,检测方法也没有。如果您必须使用这些功能,也许可以考虑一种简单但不显眼的方式让用户选择加入/选择退出,例如Gmail的“标准”与“基本HTML”视图选项,或者考虑自动选择加入已知良好的浏览器。