В этой статье описываются утечки памяти JavaScript и навыки управления памятью, которые очень практичны. Поделитесь этим для вашей ссылки. Конкретные методы следующие:
Содержание этой статьи от Google Webperf (London Webperf Group), 26 августа 2014 года.
Вообще говоря, эффективные веб -приложения JavaScript должны быть гладкими и быстрыми. Любое приложение, которое взаимодействует с пользователями, должно рассмотреть вопрос о том, как обеспечить эффективное использование памяти, потому что, если потребляется слишком много, страница будет сбояться, заставив пользователя перезагрузить. И вы можете спрятаться только в углу и плакать.
Автоматическая сборка мусора не является заменой эффективного управления памятью, особенно в больших, долгосрочных веб-приложениях. В этой статье мы продемонстрируем, как эффективно управлять памятью через Devtools Chrome.
И узнайте, как решить проблемы с производительностью, такие как утечки памяти, частая пауза сбора мусора и общее раздувание памяти, что действительно стоит вам энергии.
Адди Османи показывает множество примеров в своем PPT, что вызовет утечки памяти в Chrome V8:
1) Удалить свойство объекта, чтобы замедлить этот объект (потребление в 15 раз больше памяти)
var O = {x: 'y'}; удалить Ox; // в это время o станет медленным предметом волами; // var o = {x: 'y'}; o = null; // это должно быть2) Закрытие
При введении переменных вне закрытия в закрытие, этот объект не может быть собранным мусором (GC), когда закрытие заканчивается.
var a = function () {var lestr = new Array (1000000) .join ('x'); return function () {return lastgestr; }} ();3) DOM утечка
Когда оригинальный COM удаляется, ссылка на суб-узел не может быть переработана, если он не будет удален.
var select = document.queryselector; var treeref = select ('#tree'); // В дереве Com Leafref - это дочерний узел Treefre var leafref = select ('#Leaf'); var body = select ('body'); Body.removechild (Treeref); //#Дерево не может быть погашено, потому что Treeref все еще там // Решение: Treeref = null; // Дерево не может быть погашено, потому что Leafref все еще существует Leafref = NULL; // Сейчас #Tree может быть выпущен.4) Таймеры подсчета (определение) утечка таймера
Таймеры также являются обычными местами, где возникают утечки памяти:
for (var i = 0; i <90000; i ++) {var buggyObject = {callagain: function () {var ref = this; var val = settimeout (function () {ref.callagain ();}, 90000); }} buggyObject.callagain (); // хотя вы хотите переработать, таймер по -прежнему остается buggyobject = null;}5) Память отладки
Инструмент отладки памяти Chrome может легко просматривать использование памяти и утечки памяти:
Нажмите «Запись» в временной шкале -> Память:
Я надеюсь, что эта статья будет полезна для учебного программирования JavaScript.