それだとブラウザのタスクマネージャでも見れますが JavaScript 内では取れないのでしょうか
そういえば performance.memory というものがありました
performance.memory
// MemoryInfo {totalJSHeapSize: 5041902, usedJSHeapSize: 2708906, jsHeapSizeLimit: 2172649472}
しかしこれはもう deprecated らしいです
これで取得できる情報はあまり正確な値ではなかったようです
代わりに performance.measureUserAgentSpecificMemory() を使えばいいようです
Chrome ではすでに実装されてるようなのですが performance.measureUserAgentSpecificMemory は undefined でした
セキュリティの都合でクロスオリジン分離されてるページじゃないと使えないんだとか
window.crossOriginIsolated が true になっている必要があります
レスポンスの HTTP ヘッダーで指定する必要があるようです
Node.js でこんなサーバーを起動します
require("http").createServer((req, res) => {
res.setHeader("Content-Type", "text/html")
res.setHeader("Cross-Origin-Opener-Policy", "same-origin")
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp")
res.end("<h1>ok</h1>")
}).listen(8000)
localhost:8000 にアクセスして確認してみます
window.crossOriginIsolated
// true
performance.measureUserAgentSpecificMemory
// ƒ measureUserAgentSpecificMemory() { [native code] }
関数がありますね
実行してみると結果はこんなでした
await performance.measureUserAgentSpecificMemory()
// {
// breakdown: Array(4)
// 0:
// attribution: []
// bytes: 15200
// types: ['DOM']
// [[Prototype]]: Object
// 1:
// attribution: []
// bytes: 776005
// types: ['Shared']
// [[Prototype]]: Object
// 2:
// attribution: [{…}]
// 0:
// scope: 'Window'
// url: 'http://localhost:8000/'
// length: 1
// [[Prototype]]: Array(0)
// bytes: 1373861
// types: ['JavaScript']
// [[Prototype]]: Object
// 3:
// attribution: []
// bytes: 0
// types: []
// [[Prototype]]: Object
// length: 4
// [[Prototype]]: Array(0)
// bytes: 2165066
// [[Prototype]]: Object
// }
DOM や JavaScript などの種類ごとに分かれた詳細な使用量と全体の使用量が見れます
このクロスオリジン分離は SharedArrayBuffer を使うときにも必要なものです
最近はこの機能は HTTPS 必須だとか あの機能はクロスオリジン分離が必要だとか 面倒になってますね