可以在浏览器中检查“可用内存”吗?

Dav*_*542 12 javascript memory google-chrome v8

我只是在编一个场景,但假设我有一个 500MB 的文件,我想为客户端提供一个 html 表来查看数据。假设有两种情况:

  • 他们正在通过桌面查看它,其中有 1.2GB 的可用内存。他们可以下载整个文件。
  • 后来,他们尝试在手机上查看同一张桌子。我们检测到他们只有 27MB 的可用内存,因此向他们发出警告:“我们检测到您的设备没有足够的内存来查看整个表格。您要改为下载示例吗?”

忽略分页或虚拟表之类的东西,我只关心“完整数据集是否可以放入用户的可用内存中”。这是否可以在浏览器中检测到(即使经过用户的确认)。如果是这样,怎么能做到这一点?

更新

这个答案大约在 6 年前就有答案,问题指向 10 年前的答案。我想知道当前的状态是什么,因为从那时起浏览器发生了很大的变化,还有 webassembly 等。

Eli*_*ias 6

使用performance.memory.usedJSHeapSize. 虽然它是非标准的并且正在开发中,但它足以测试所使用的内存。您可以在 edge/chrome/opera 上试用它,但遗憾的是不能在 firefox 或 safari 上(截至撰写本文时)。

属性( performance.memory)

jsHeapSizeLimit:上下文可用的堆的最大大小(以字节为单位)。

totalJSHeapSize:总分配的堆大小,以字节为单位。

usedJSHeapSize: JS 堆的当前活动段,以字节为单位。

阅读更多关于performance.memoryhttps : //developer.mozilla.org/en-US/docs/Web/API/Performance/memory

CanIUse.com:https://caniuse.com/mdn-api_performance_memory

CanIUse.com 2020/01/22 CanIUseTableImage


use*_*170 3

有点。

\n

截至撰写本文时,设备内存规范正在开发中。它指定navigator.deviceMemory包含总设备内存(以 GiB 为单位)的粗略数量级估计的属性;此 API 仅适用于通过 HTTPS 提供服务的站点。这两个限制都是为了减少对客户(尤其是第三方)进行指纹识别的可能性。(该规范还定义了 \xe2\x80\x98clienthint\xe2\x80\x99 HTTP 标头,它允许直接在服务器端检查可用内存。)

\n

然而,W3C 工作草案的日期为 2018 年 9 月,而Editor\xe2\x80\x99s 草案的日期为 2020 年 11 月,但该时间跨度内的更改仅限于内务处理和编辑修复。因此,这方面的发展充其量也显得不冷不热。此外,它目前仅在 Chromium 衍生物中实现

\n

请记住:仅仅因为客户端确实拥有一定量的内存,并不意味着可以使用它。也许他们想将其用于其他目的。知道存在大量内存并不意味着允许使用所有内存而排除其他人。此 API 的最佳用途可能类似于问题中指定的用途:检测我们要发送的数据是否太大而导致客户端无法处理。

\n