Ответ 1
Для тех, кто находит это в будущем, поскольку версия 20 Chrome поддерживает window.performance.memory
, которая возвращает что-то вроде:
{
totalJSHeapSize: 21700000,
usedJSHeapSize: 13400000,
jsHeapSizeLimit: 1620000000
}
Как я могу программно получить использование памяти (JS и общий) моего сайта в Google Chrome?
Я просмотрел это из расширения Chrome, используя недокументированный HeapProfiler (см. здесь), но я не могу найти способ получить данные от этого.
Я хочу измерить потребление памяти в каждой версии, поэтому это должно быть программным.
EDIT: Я понял, как заставить метод HeapProfiler работать. Каждое событие addHeapSnapshotChunk
имеет кусок объекта JSON.
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');
});
});
});
При анализе JSON имеет узлы, ребра и описательные метаданные о node, а также типы и поля ребер.
В качестве альтернативы я мог бы использовать Timeline, если мне просто нужны итоги.
Тем не менее, есть ли лучшие способы, чем то, что я узнал здесь?
Для тех, кто находит это в будущем, поскольку версия 20 Chrome поддерживает window.performance.memory
, которая возвращает что-то вроде:
{
totalJSHeapSize: 21700000,
usedJSHeapSize: 13400000,
jsHeapSizeLimit: 1620000000
}
Альтернативный подход: напишите скребок веб-страницы, указывающий на этот URL-адрес:
хром://система/
(обратите внимание: в случае, если этот URL снова изменится, это "главный" URL-адрес, в котором перечислены все страницы диагностики хрома: chrome://chrome-urls/
на странице есть раздел "mem_usage", который содержит сведения об использовании памяти.
Может быть, есть какой-то способ script Chrome как пользователь (скажем, в AutoIT или Python?), который загружает этот URL-адрес в Chrome, а затем нажимает кнопку "Обновить", а затем анализирует JSON, чтобы получить использование памяти для чего-либо вкладки, которые вас интересуют.
Другие подходы:
из JavaScript - используйте window.performance
из JavaScript - используйте browser-report.js -
В канале chrome dev есть процесс api, chrome.process. Вы можете запросить его для информации о процессе табуляции, которая включает в себя все виды информации о памяти. http://developer.chrome.com/extensions/processes.html
Для этого существует библиотека js: https://github.com/spite/memory-stats.js