Flat Vector Illustration in Outline Style of a Coder or Geek in Programming Participates in Hackathon
Meta (Facebook) решила помочь сообществу JavaScript и бесплатно поделилась инструментом для оптимизации памяти. Об этом сообщается в блоге компании.
В корпорации создали MemLab — среду тестирования памяти JavaScript, которая автоматизирует обнаружение утечек памяти. Как уточнили создатели, устранение основной причины утечек памяти важно для обеспечения качественного взаимодействия с пользователем в веб-приложениях.
«Люди, использующие наши веб-приложения, часто сразу замечают проблемы с производительностью и функциональной корректностью. Однако утечка памяти — это отдельная история. Это не сразу заметно, потому что съедает кусок памяти за раз, влияя на весь веб-сеанс и делая последующие взаимодействия более медленными», — объясняют в Meta.
Высокий уровень использования памяти оказывает влияние на:
В двух словах, MemLab находит утечки памяти, запуская headless-браузер (браузер без интерфейса, прим.) с помощью предопределенных тестовых сценариев, а также изучая и анализируя снимки кучи (heap — сегмент памяти, предназначенный для хранения ссылочных типов вроде объектов, строк и замыканий, прим.) JavaScript.
Этот процесс происходит в шесть шагов:
Чтобы найти просочившиеся объекты на целевой странице (B), MemLab автоматизирует браузер с помощью Puppeteer и посещает тестовые страницы в следующем порядке:
Иллюстрация, источник: Meta
Когда мы переходим на страницу, а затем уходим с нее, мы ожидаем, что большая часть памяти, выделенной этой страницей, также будет освобождена. Если нет, то это наталкивает на мысль об утечке памяти. MemLab находит потенциальные утечки памяти, анализируя кучу JavaScript и записывая набор объектов, выделенных на странице B, которые не были выделены на странице A, но все еще присутствуют при перезагрузке страницы A. Или, более формально, надмножество объектов, просочившихся с целевой страницы, может быть получено как (SB \ SA) ∩ SA’).
Детектор утечек дополнительно включает в себя знания, специфичные для платформы, для уточнения списка утекших объектов. Например, узлы Fiber, выделенные React (внутренняя структура данных, которую React использует для рендеринга виртуального DOM), должны быть освобождены, когда мы очищаемся после посещения нескольких вкладок.
MemLab просматривает кучу и генерирует трассировки фиксаторов для каждого просочившегося объекта. Трассировка остатка — это цепочка ссылок на объекты от корней GC (объекты входа в графе кучи, из которых сборщики мусора обходят кучу) до объекта с утечкой. Трассировка показывает, почему и как просочившийся объект сохраняется в памяти. Разрыв цепочки ссылок означает, что утекший объект больше не будет доступен из корня GC и, следовательно, может быть удален сборщиком мусора. Следуя трассировке фиксатора шаг за шагом, вы можете найти ссылку, которая должна быть установлена на null (но не была установлена из-за ошибки).
Иногда определенные взаимодействия могут вызвать утечку тысяч объектов. В этом случае было бы слишком сложно показать все следы фиксатора. MemLab группирует все трассировки ретейнеров и показывает одну трассировку для каждого кластера просочившихся объектов, которые имеют схожие трассировки ретейнеров. Трассировка также включает отладочную информацию, такую как основные узлы и сохраненные размеры.
Чтобы получать непрерывный сигнал о регрессии памяти, инструмент следует запускать несколько раз в течение дня. Любые новые регрессии добавляются на внутреннюю панель мониторинга, где собираются и классифицируются сгруппированные следы хранения всех обнаруженных утечек памяти. Затем можно просмотреть свойства объектов на трассировке фиксатора каждой утечки памяти.
Инструмент можно установить через npm или собрать его из репозитория GitHub. Также Meta сделала краткое руководство, которое поможет начать работу c MemLab.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…