Подтвердить что ты не робот

Программно использовать память в Chrome

Как я могу программно получить использование памяти (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, если мне просто нужны итоги.

Тем не менее, есть ли лучшие способы, чем то, что я узнал здесь?

4b9b3361

Ответ 1

Для тех, кто находит это в будущем, поскольку версия 20 Chrome поддерживает window.performance.memory, которая возвращает что-то вроде:

{
  totalJSHeapSize: 21700000,
  usedJSHeapSize: 13400000,
  jsHeapSizeLimit: 1620000000
}

Ответ 2

Альтернативный подход: напишите скребок веб-страницы, указывающий на этот URL-адрес:

хром://система/

(обратите внимание: в случае, если этот URL снова изменится, это "главный" URL-адрес, в котором перечислены все страницы диагностики хрома: chrome://chrome-urls/

на странице есть раздел "mem_usage", который содержит сведения об использовании памяти.

Может быть, есть какой-то способ script Chrome как пользователь (скажем, в AutoIT или Python?), который загружает этот URL-адрес в Chrome, а затем нажимает кнопку "Обновить", а затем анализирует JSON, чтобы получить использование памяти для чего-либо вкладки, которые вас интересуют.


Другие подходы:

  • из JavaScript - используйте window.performance

  • из JavaScript - используйте browser-report.js -

https://www.npmjs.com/package/browser-report

Ответ 3

В канале chrome dev есть процесс api, chrome.process. Вы можете запросить его для информации о процессе табуляции, которая включает в себя все виды информации о памяти. http://developer.chrome.com/extensions/processes.html