Ионные 2 / Ионный 3 - Вывоз Мусора


Я пытаюсь лучше понять ionic2 и ionic3.

Как работает сбор мусора в ionic?

  • что кэшируется и когда?
  • Как мы можем очистить этот кэш?
  • Как мы устанавливаем элементы для G. C.?
  • Нужно ли вообще настраивать элементы для G. C?
  • можем ли мы / должны ли мы настроить страницы для G. C.?

Как видно на этой картинке (Источник):

Введите описание изображения здесь

Часть памяти получает G. C'D при переходе на новую страницу. Однако память по-прежнему значительно выше, чем до воспроизведения любого видео.

1 8

1 ответ:

Хорошо, я попробую это сделать:

  • Ionic сама по себе не имеет большого отношения к GC, нет запланированных запусков задачи, которая убирает за вами. Единственное, что ionic (или, точнее, команда разработчиков, стоящая за ionic) должна сделать, это разработать и реализовать свои компоненты пользовательского интерфейса таким образом, чтобы они не съедали слишком много памяти, а также не использовали неиспользуемую память. Особенно с виртуальной прокруткой были проблемы с утечкой памяти и так далее.
  • Итак, давайте пройдем на уровень глубже: угловой! То же самое, что и с ионикой. Разработчики Angular отвечают за то, сколько памяти используется их фреймворком. Но Angular предоставляет очень полезный метод ngOnDestroy(). Почему этот метод важен для вас как разработчика приложений? Потому что это дает вам возможность убрать за собой. Этот метод вызывается непосредственно перед уничтожением вашего компонента, что это значит? Вам не нужны выделенные объекты, массивы, видеоэлементы (установите src='' и затем вызовите load()) и т. д. больше и вы можете освободить память. это и это хорошие чтения о том, как освободить память. Однако, как упоминают docs for onDestory(), вам нужно только освободить память, которая не очищается автоматическим GC (подписки, медиа-элементы, ...). Что приводит нас к следующему уровню:
  • Javascript / Browser: именно здесь происходит" настоящий " GC. Javascript использует mark-and-sweep garbage collecotor (все современные браузеры поставляются с одним), Вы можете прочитать об этом здесь . Он запускается время от времени и освобождает каждый объект, который недоступен/на который больше нет ссылок, чтобы явно отметить объект для GC, используйте ключевое слово delete. Следующее изображение визуализирует процесс разметки и развертки:

Javascript метка и алгоритм развертки

Изображение взято из этой статьи , она объясняет, как управление памятью javascript работает очень подробно, я сильно рекомендую прочитать его.

  • и, конечно, у вас всегда есть родной GC Java / Obj-C, который очищает родную часть приложения.