TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 780 subscribers
Post #1624 6
浏览器硬件诊断:能读到什么,读不到什么

作者花时间构建了一套基于浏览器的硬件诊断工具,并总结出 Web 平台在硬件检测上的真实边界。核心结论:出于反指纹追踪的考虑,几乎所有硬件相关 API 都被刻意削弱,浏览器能给出的只是相对测量值,而非真实硬件规格。

刷新率:没有 screen.refreshRate 这类 API,唯一办法是用 requestAnimationFrame 回调计时,取帧间隔的中位数推算。注意必须用中位数而非平均值,一次掉帧就会毁掉平均值;且后台标签页会节流 rAF,测量前需检查 document.visibilityState。

屏幕尺寸:screen.width、window.innerWidth、devicePixelRatio、screen.availWidth 测量的是不同东西。通常想要的原生面板分辨率是 screen.width * devicePixelRatio,但这也是基于 CSS 像素推导的,缩放显示下可能与物理面板不一致。浏览器根本不暴露真实硬件分辨率。

键盘:event.key 依赖布局,event.code 是物理位置,硬件测试应使用后者。PrintScreen 常不触发 keydown,Meta 组合键被系统吞掉,Fn 在多数笔记本上不可见。N-key rollover 测试效果不错,跟踪当前按住的 Set 大小即可,廉价键盘在 3-4 键同按时丢输入会很明显。

指针事件:pointerdown/pointerup 统一了鼠标、触摸和笔,pointerId 可正确追踪多点触控。检测磨损开关的双击故障,只需测量同一按钮连续 pointerdown 的间隔,低于约 80ms 且无移动,基本可判定为硬件故障。注意 preventDefault() 会杀掉后续的兼容鼠标事件。

Gamepad:轴移动没有事件,只能在 rAF 循环里轮询 navigator.getGamepads()。控制器在用户按键前不会出现,数组里全是 null。摇杆漂移表现为静止时轴值不为 0,超过约 0.08 即为电位器磨损。

媒体设备:enumerateDevices() 在授权前能列出设备但标签全为空字符串,只有 getUserMedia() 成功后才有可读名称。麦克风电平用 AnalyserNode 的 getByteTimeDomainData 计算 RMS 比频域数据更稳定。

坏点检测:没有 API,唯一可行方案是用 Fullscreen API 填充纯色让肉眼观察。不是所有问题都需要程序化答案,全屏渲染 #ff0000 本身就是工具。


所有十个诊断 demo 均在客户端运行、不上传任何数据。作者认为,诚实的工具应测量行为而非声称读取规格,并欢迎对刷新率测量方案的改进建议。

#开发者 #工具 #JavaScript #硬件诊断 #浏览器API #WebAPI #性能测试
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 26, 2026PostgreSQL 复制槽上限参数 max_replication_slots 解析 max_replication_slots 决定共享内存中复制槽数组的长度,仅此而已。它不决…
  2. Sep 26, 2026五仓库架构踩坑:Gitlink 与双 CI Flude 团队复盘了多仓库架构的实践代价。项目从第一分钟起就选择拆分成独立仓库,Pipeline、engine、design-docs…
  3. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  4. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  5. Sep 25, 2026Xcode 27.2 改用 JSON 项目格式 Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目…
  6. Sep 25, 2026PostgreSQL 的 max_prepared_transactions 该不该开 prepared transaction 是脱离会话独立存在的两阶段提交事务。执行 PREP…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →