我想获得设备内存(我80%的时间是android手机),我编写了这段代码。
<html>
<body>
<p class="ram-description">Your device memory is <span id="result">unknown</span> GB.</p>
<script>
document.getElementById('result').innerHTML = navigator.deviceMemory || 'unknown'
</script>
</body>
</html>
但是我认为(navigator.deviceMemory)不适用于RAM大于4 GB的电话或其他设备
例如,我的手机有6GB内存,并且显示4GB 我的笔记本电脑有16GB,显示8GB
有人可以帮助我吗?
<html>
<body>
<p class="ram-description"><b id="result">Your device memory is <b id="result">unknown</b> GiB.</p>
<script>
document.getElementById('result').innerHTML = navigator.deviceMemory || 'unknown'
</script>
</body>
</html>
答案 0 :(得分:1)
上限和下限用于保护非常低端或高端设备的所有者的隐私
引自https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory
答案 1 :(得分:1)
这也让我感到困惑,所以我进一步挖掘了我能找到的资源,以很好地回答这个 API 的实际工作原理。
事实是,浏览器脚本不可能检索设备的精确内存量。这是故意不可用的,以防止设备指纹识别。
相反,Navigator.deviceMemory
为我们提供了一些非常准确但仍然匿名的信息:它根据它可能拥有的最小内存量将设备放入一个群组中。
以下是根据 the definition in the draft spec 进行计算的方式:
1011101110000
。1
并将所有较小的位设置为 0
。这与向下舍入到最接近的 2 次幂相同。对于电话示例,基数 2 1011101110000
变为 1000000000000
= 2¹² = 4096 MiB。Navigator.deviceMemory
返回。因此,您可以在 Android 手机上获得 4
。草案还建议限制最大值和最小值:
<块引用>注意:虽然实现可能会选择不同的值,但建议上限为 8GiB,建议下限为 0.25GiB(或 256MiB)。
这意味着每个设备都将被放置在 6 个可能的群组之一中:0.25, 0.5, 1, 2, 4, 8
。这是我们目前能做的最好的事情。拥有 0.9995 GB RAM 的人会报告有 0.5 GB,而拥有 128 GB 工作站的人会报告只有 8。
如果您打算使用此 API 来改变您的网站/应用程序的性能(而不是像 OP 示例中那样仅向用户报告价值),请谨慎操作。一台机器可能报告有 8 GB 的 RAM,但如果该设备已经使用了其中的 80%(而您无法知道),那么您最好将其视为只有 1GB。它还只考虑 RAM,而不考虑处理器速度、GPU 速度/内存或其他性能变量。
最后,当前的浏览器支持仅支持 Chromium,Safari 团队的某个人说 they won't be adding this API 是因为它的实用性和隐私影响有限。警告清空者。