2016-11-02 3 views
8

Я хочу, чтобы иметь возможность отслеживать, сколько массивов используется определенной программой, так что я могу выяснить, была ли выделена ненужная память. Проблема, с которой я столкнулся, - это конструкция Javascript, что массив литерала [] не вызывает Array#constructor. Есть ли другой способ отслеживать использование массива? ES5 и/или ES6 и далее.Как отслеживать, сколько массивов создано в Javascript?

var arrayConstructor = Array // store reference 
window.arrCount = 0 
window.Array = function() { 
    arrCount++; 
    return new Array(); 
} 

var arr1 = new Array 
window.arrCount // 1 

var arr2 = [] 
window.arrCount // 1 : NOT WORKING! 
+0

Вы можете перехватывать вызовы на 'Массив .__ прото __. Constructor' или' Object .__ прото __. Constructor'? –

+0

@DavidEhrmann Нет, я считаю, проблема в том, что javascript замыкает конструктор Array при использовании литералов. – user2167582

+0

no Вы не можете переопределить литерал массива, см. Это: http://stackoverflow.com/questions/25084889/overriding-array-literal-in-javascript –

ответ

7

Практически каждый веб-браузер имеет профилировщик javascript. Целью профилировщика является отслеживать использование памяти, каркасный рендеринг скорости, использование процессора и т.д.

  • Откройте Инструменты разработчика Chrome (F12)
  • Перейдите на вкладку «Временную шкалу»
  • убедитесь, что «Память» проверяется в баре под названием «Захват»
  • Нажмите кнопку записи в левом верхнем углу
  • Обновить страницу
  • Остановить запись после того, как страница была загружена
  • Посмотрите на график «JS Heap» для пробоя по которой ваша память пошел

Например, профайлер памяти Chrome выглядит следующим образом при записи загрузки страницы Top Вопросы на переполнению стека в.

enter image description here

Смежные вопросы