Я использовал представление Временная шкала Chrome, чтобы попытаться отследить некоторую память утечки на моей странице. Я обнаружил одну конкретную утечку памяти в результате создания экземпляров веб-воркеров, от которой я не могу понять, как избавиться.

Я вырезал страницу, чтобы просто загрузить веб-воркера и больше ничего не делать. Каждый раз, когда я обновляю страницу, количество документов в представлении временной шкалы Chrome постоянно увеличивается на 1. Если я закомментирую вызов конструктора Worker и начну обновлять страницу, количество документов увеличивается, а затем уменьшается, фактически оставаясь неизменным. Завершение / закрытие воркера вручную не решает проблему (хотя я вижу, что воркер исчезает, когда смотрю на вкладку «Источники» в инструментах разработчика).

Вот мой урезанный файл .htm. Я могу воспроизвести проблему с помощью всего этого короткого фрагмента html / javascript:

<html>
<script type="text/javascript">
var worker_blob = new Blob(["var test = 1;"]);
var worker_url = window.URL.createObjectURL(worker_blob);
// Comment out the line below and the memory leak goes away
var worker = new Worker(worker_url);
window.URL.revokeObjectURL(worker_url);
</script>
</html>
5
Jon Senchyna 27 Мар 2013 в 00:25
Когда ваш работник завершит свою задачу, он может закрыть сам или ваша страница может позвонить terminate.
 – 
Denys Séguret
27 Мар 2013 в 00:28
Я уже пробовал оба, и ни один из них не помог решить проблему. Кроме того, рабочий должен быть прекращен, когда я покидаю страницу.
 – 
Jon Senchyna
27 Мар 2013 в 00:34
2
 – 
Alexander Pavlov
27 Мар 2013 в 21:06
Я не могу сказать, что полностью понимаю отчет об ошибке, но похоже, что он связан с проблемой, с которой я сталкиваюсь. Надеюсь, этот простой тестовый пример поможет вам воспроизвести / исправить проблему.
 – 
Jon Senchyna
27 Мар 2013 в 21:15

1 ответ

Лучший ответ

Это утечка памяти в Chrome v25. Кажется, это исправлено в Chrome v26, так как проблема больше не может быть воспроизведена.

3
Jon Senchyna 30 Мар 2013 в 03:09