Обнаружение утечки Javascript в Chrome - PullRequest
3 голосов
/ 13 октября 2010

Я делаю много вызовов ajax на своем сайте и использую jQuery 1.4.2, пока не заметил, что он подтекает.Это происходило с IE, Firefox и Chrome.После некоторого расследования я нашел исправление для IE.Я попробовал это, но это не исправило это ни для одного из трех браузеров.Затем я нашел сообщение, где этот человек сравнивал библиотеку Javascript от Yahoo с jQuery.Yahoo не просочилась для этого человека.Я переключился на Yahoo, и это остановило утечку в IE и Firefox (я даже использовал аддон утечки Firefox).Но Chrome все еще подтекает.Chrome создает около 200 МБ памяти, а затем вылетает моя вкладка.Аякс вызов каждую секунду.Проходит около часа, прежде чем вкладка вылетает.Если я покидаю страницу, память освобождается.Опять же, в IE и Firefox проблема исчезла.

Какой лучший способ определить, в чем заключается проблема Chrome?Я искал дополнение, но еще не нашел.Я также провел поиск в Google, но там тоже ничего не нашел.Я сделал кучу снимков, но я вижу большие цифры рядом с (закрытие) и (код).

Мне понравился Firefox один (Leak Monitor), который позволил легко увидеть проблему.Что-нибудь подобное для Chrome или какие-либо предложения по поиску утечки?

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Используйте встроенный Chrome Profiler в DevTools (нажмите F12 в Chrome, затем перейдите на вкладку «Профили»):

enter image description here

Здесь вы можете найти, как это проверить:

ссылка

4 голосов
/ 13 октября 2010

Фреймворк не вызывает утечку, это ваш код. Позвольте мне угадать, как выглядит ваш код.

$.get('//url/',function(){
   //lets do fun stuff!
   function(){
     //more fun expensive stuff for the browser to do
   }
};

//A more efficient way (doesn't create closures)
function expensivefn(){
  //Do expensive stuff here
}
$.get('//url',expensivefn);

Это только один из возможных способов, которым ваш код может быть неэффективным. Я обычно не создаю страницы с бесконечным циклом, обычно я ищу определенное количество времени, а затем спрашиваю пользователя, не хочет ли он еще опросить Используемый цикл может создавать ненужные замыкания, как в примере выше. Например,

//Bad!
setInterval(function(){
  //Expensive stuff
}, 1000)

//Good
function expensivestuff(){
  //Expensive stuff
}
setInterval(expensivestuff,1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...