Библиотека PixiJS активно использует внутренние механизмы кеширования для оптимизации загрузки и повторного использования ресурсов: текстур, спрайтов, шрифтов, атласов и других ассетов. После первой загрузки ресурс сохраняется во внутреннем хранилище, что позволяет избежать повторных HTTP-запросов и ускоряет создание графических объектов.
В версии 7+ ключевую роль в управлении ресурсами выполняет система
Assets, пришедшая на смену устаревшему Loader.
Загруженные данные автоматически регистрируются в кеше и становятся
доступны по строковому ключу или URL.
Основные типы кешируемых объектов:
TextureBaseTextureSpritesheetBitmapFontПонимание процесса выгрузки ресурсов критично при разработке масштабных приложений, игр и интерактивных интерфейсов, где динамически изменяются сцены и объёмы загружаемых данных.
Накопление неиспользуемых текстур приводит к:
Особенно актуальна выгрузка:
В современных версиях PixiJS управление кешем осуществляется через
модуль Assets.
await PIXI.Assets.load('images/player.png');
После загрузки текстура автоматически попадает в кеш.
PIXI.Assets.unload('images/player.png');
Метод unload():
Если ресурс использовался в нескольких объектах, необходимо предварительно убедиться, что ни один объект больше его не использует.
Для удаления всех ресурсов:
await PIXI.Assets.reset();
Метод reset():
Важно учитывать, что спрайты, продолжающие ссылаться на текстуры,
могут удерживать их в памяти. Поэтому корректная очистка сцены должна
выполняться перед вызовом reset().
Иногда требуется более тонкий контроль над жизненным циклом текстур.
texture.destroy(true);
Параметр true означает, что будет уничтожена и связанная
BaseTexture.
sprite.destroy({
texture: true,
baseTexture: true
});
Параметры:
texture: true — удаляет текстуру спрайта;baseTexture: true — освобождает GPU-память.Без явного уничтожения текстуры остаются в кеше.
Внутренние кеши доступны через:
PIXI.utils.TextureCache
PIXI.utils.BaseTextureCache
Удаление текстуры из кеша:
delete PIXI.utils.TextureCache['images/player.png'];
Удаление базовой текстуры:
delete PIXI.utils.BaseTextureCache['images/player.png'];
Этот способ считается низкоуровневым и используется только при глубокой оптимизации или работе с устаревшими версиями библиотеки.
При работе с атласами:
const sheet = await PIXI.Assets.load('atlas.json');
Выгрузка:
PIXI.Assets.unload('atlas.json');
Атлас включает:
Texture.При выгрузке автоматически удаляются связанные текстуры, если на них нет активных ссылок.
Перед удалением ресурсов требуется:
Удалить объекты из контейнера:
container.removeChildren();Уничтожить объекты:
container.destroy({ children: true });После этого вызывать Assets.unload().
Если последовательность нарушена, текстуры могут остаться в памяти из-за сохранённых ссылок.
PixiJS хранит текстуры в виде WebGL-ресурсов. Даже если объект
JavaScript удалён, GPU-память освобождается только после вызова
destroy().
Особенности:
BaseTexture управляет загрузкой в GPU.Texture является обёрткой над
BaseTexture.Texture без удаления
BaseTexture не освобождает видеопамять.Правильная последовательность:
В архитектуре игровых приложений распространён шаблон менеджера сцен:
class Scene {
async load() {}
update() {}
destroy() {}
}
Метод destroy() должен:
Assets.unload().Такой подход позволяет избежать накопления текстур при многократных переходах.
Для диагностики используются:
console.log(Object.keys(PIXI.utils.TextureCache));
console.log(Object.keys(PIXI.utils.BaseTextureCache));
Это позволяет:
В инструментах разработчика браузера вкладка Memory помогает отслеживать удерживаемые объекты и ссылки.
В режиме WebGL:
В режиме Canvas:
1. Удаление из контейнера без destroy()
Объект исчезает визуально, но текстура остаётся в памяти.
2. Уничтожение спрайта без удаления текстуры
BaseTexture остаётся в кеше.
3. Повторная загрузка одного и того же ресурса
При отсутствии проверки создаются дублирующие записи.
4. Использование устаревшего Loader без ручной очистки
В старых версиях PixiJS Loader не удалял данные
автоматически.
Ресурсы загружаются только при входе на сцену.
Использование массивов ключей:
await PIXI.Assets.unload([
'enemy.png',
'boss.png',
'background.jpg'
]);
Перед выгрузкой необходимо убедиться, что:
При создании текстур через RenderTexture:
const renderTexture = PIXI.RenderTexture.create({ width: 256, height: 256 });
Освобождение:
renderTexture.destroy(true);
Динамические текстуры особенно требовательны к памяти, так как часто создаются в большом количестве.
JavaScript автоматически освобождает память только при отсутствии ссылок. Однако:
destroy();Корректное удаление обработчиков:
sprite.removeAllListeners();
Грамотная работа с кешем в PixiJS напрямую влияет на стабильность, производительность и масштабируемость графического приложения. Управление жизненным циклом ресурсов является обязательным элементом профессиональной разработки интерактивных WebGL-приложений.