#javascript #debugging #browser #memory-leaks #cross-browser
#javascript #отладка #браузер #утечки памяти #кроссбраузерность
Вопрос:
Я прочитал много заявлений о том, что циклические ссылки вызывают утечки памяти:
- http://www.ibm.com/developerworks/web/library/wa-memleak/
- http://www.quirksmode.org/blog/archives/2005/02/javascript_memo.html
- http://www.javascriptkit.com/javatutors/closuresleak/index3.shtml
Итак, я протестировал этот скрипт в Chrome / FF4 / IE9 / Opera / Safari:
<script>
var a, b, list = [];
for(var x=0;x<1000000;x =2){
a = list[x] = document.createElement("div");
b = list[x 1] = document.createElement("div");
a.hook = b;
b.hook = a;
}
</script>
Диспетчер задач показывает, что скрипт потребляет ~ 0,2 ГБ памяти.
Затем я обновил страницу 10 раз. Если скрипт действительно вызывает утечки памяти, после 10 обновлений я должен увидеть ~ 2 ГБ потребляемой памяти, однако диспетчер задач показывает обратное.
В каких браузерах циклические ссылки вызывают утечки памяти в JavaScript?
Комментарии:
Ответ №1:
Утечки памяти были в основном проблемой в старых версиях с циклическими ссылками и сборкой мусора с подсчетом ссылок, которая никогда полностью не восстанавливала все (никогда количество ссылок в циклических ссылках не равнялось 0).
Я думаю, что утечки памяти в IE были исправлены с IE8.
Комментарии:
1. другими словами, как бы мы ни старались, утечки памяти javascript больше невозможны?
2. @Pacerier Ну, IE7 и IE6 все еще довольно распространены.
3. хорошо, позвольте мне перефразировать мой вопрос. итак, можем ли мы сказать, что утечки памяти на 100% больше невозможны в современных браузерах?
4. @Pacerier Я не уверен на 100%. Вы всегда можете взломать исходный код в своем любимом браузере с открытым исходным кодом и посмотреть, не освобождается ли какая-либо память при каких обстоятельствах.
5. @Pacerier, Microsoft устала от IE6; они понимают, что это довольно ужасно по современным стандартам, и хотят заставить людей перейти на более приятные, новые браузеры. Они не хотят прослыть ужасными браузерами только потому, что люди недавно не обновляли их…