How can I programmatically get memory usage (JS and total) of my website in Google Chrome?
I looked at doing it from a Chrome extension using the undocumented HeapProfiler (see here), but I can't find a way to get data from that.
I want to measure the memory consumption it at every release, so this needs to be programmatic.
EDIT: I figured out how to get the HeapProfiler method to work. Each addHeapSnapshotChunk
event has a chunk of a JSON object.
chrome.browserAction.onClicked.addListener(function(tab) {
var heapData,
debugId = {tabId:tab.id};
chrome.debugger.attach(debugId, '1.0', function() {
chrome.debugger.sendCommand(debugId, 'Debugger.enable', {}, function() {
function headerListener(source, name, data) {
if(source.tabId == tab.id && name == 'HeapProfiler.addProfileHeader') {
function chunkListener(source, name, data) {
if(name == 'HeapProfiler.addHeapSnapshotChunk') {
heapData += data.chunk;
} else if(name == 'HeapProfiler.finishHeapSnapshot') {
chrome.debugger.onEvent.removeListener(chunkListener);
chrome.debugger.detach(debugId);
//do something with data
console.log('Collected ' + heapData.length + ' bytes of JSON data');
}
}
chrome.debugger.onEvent.addListener(chunkListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.getHeapSnapshot', {uid:data.header.uid, type:data.header.typeId});
}
chrome.debugger.onEvent.removeListener(headerListener);
}
chrome.debugger.onEvent.addListener(headerListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.takeHeapSnapshot');
});
});
});
When parsed, the JSON has nodes, edges, and descriptive metadata about the node and edge types and fields.
Alternatively, I could use Timeline events if I just want totals.
That said, are there any better ways than what I've found out here?
Just an update on this thread: Starting chrome 83,
performance.measureMemory()
seems to be most reliable way to get memory information on chrome. It gives us the exact memory information even if the same heap is shared by multiple web pages!!. You can find more info at: https://web.dev/monitor-total-page-memory-usage/