Javascript 为什么(navigator.devicememory)对于内存超过6gb的设备不准确?

Javascript 为什么(navigator.devicememory)对于内存超过6gb的设备不准确?,javascript,html,Javascript,Html,我想获得设备内存(80%的时间是android手机),这是我写的代码 <html> <body> <p class="ram-description">Your device memory is <span id="result">unknown</span> GB.</p> <script> document.getElementById('result').innerHTML = nav

我想获得设备内存(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>

您的设备内存未知

document.getElementById('result').innerHTML=navigator.deviceMemory | | |“未知”
但我认为(navigator.deviceMemory)不适用于手机或其他内存超过4GB的设备

例如,我的手机有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>

您的设备内存未知

document.getElementById('result').innerHTML=navigator.deviceMemory | | |“未知”
下限和上限用于保护非常低端或高端设备所有者的隐私


引自

这也让我感到困惑,因此我进一步挖掘了我能找到的资源,以找到这个API实际工作原理的好答案

事实是,浏览器脚本无法检索设备的精确内存量。这是故意不可用的,作为防止设备指纹的保护

相反,
Navigator.deviceMemory
为我们提供了一些有用的准确信息,但仍然是匿名的:它根据设备可能拥有的最小内存量将设备放入队列中

以下是计算应如何根据:

  • 浏览器检查设备的实际可用内存(以兆字节为单位)(MiB,或以基数2计算的“真兆字节”)。请注意,此数字是以二进制而不是十进制处理的。如果您的Android手机有6个“市场营销讲话GB”的RAM=6000 MiB,二进制即
    1011101110000
  • 浏览器将二进制数向下舍入到“最高有效位”,这意味着保留最左边的
    1
    ,并将所有较小的位设置为
    0
    。这与四舍五入到最接近的2次方相同。对于电话示例,base 2
    1011101110000
    变为
    1000000000000
    =2 CharStyle²=4096 MiB
  • 取整后的数字除以1024得到一个GiB值,该值由
    Navigator.deviceMemory
    返回。因此,您可以在Android手机上获得
    4
  • 草案还建议对最大值和最小值进行限制:

    注意:虽然实现可能会选择不同的值,但建议的上限为8GiB,下限为0.25GiB(或256MiB)

    这意味着每个设备将被放置在6个可能的队列中的一个:
    0.25、0.5、1、2、4、8
    。这是我们目前能做的最好的了。有0.9995 GB内存的人会报告有0.5 GB内存,有128 GB工作站的人会报告只有8 GB内存

    如果你打算使用这个API来改变你的站点/应用程序的性能(而不是像OP的例子那样只向用户报告价值),那么要谨慎行事。一台机器可能会报告有8GB的RAM,但如果该设备已经使用了80%的RAM(而你无法知道),那么最好将其视为只有1GB。它还只考虑RAM,而不考虑处理器速度、GPU速度/内存或其他性能变量


    最后,目前的浏览器支持仅限于Chromium,Safari团队的一些人说,这是因为它的实用性和隐私影响有限。注意清空器。

    另请参阅。您能帮助我如何获取设备ram吗?