В PixiJS основным строительным блоком для группировки графических
объектов является PIXI.Container. Он
обеспечивает базовую иерархию сцены, позволяет добавлять и удалять
спрайты, управлять их позицией, масштабом, вращением и прозрачностью. В
стандартной реализации каждый объект в контейнере обновляется
независимо, что удобно для управления, но потенциально создает нагрузку
на рендеринг при большом количестве элементов.
PIXI.ContainerПри работе с сотнями или тысячами спрайтов стандартный контейнер начинает заметно замедлять рендеринг. Основные узкие места:
PixiJS предлагает несколько способов улучшить производительность, используя кастомные контейнеры или вспомогательные структуры.
PIXI.ParticleContainer предназначен для работы с большим
количеством однотипных объектов, таких как частицы. Основные
преимущества:
position, scale,
rotation, alpha, tint), что
ускоряет расчеты.Пример создания ParticleContainer:
const particleContainer = new PIXI.ParticleContainer(1000, {
scale: true,
position: true,
rotation: true,
uvs: true,
alpha: true
});
for (let i = 0; i < 1000; i++) {
const sprite = PIXI.Sprite.from('particle.png');
sprite.position.set(Math.random() * 800, Math.random() * 600);
particleContainer.addChild(sprite);
}
app.stage.addChild(particleContainer);
Если сравнивать с использованием обычных PIXI.Container
с PIXI.Graphics, при большом количестве объектов:
PIXI.Graphics может быть
удобен, но при динамическом обновлении тысяч объектов производительность
падает.Обычные контейнеры не объединяют спрайты по текстуре автоматически.
ParticleContainer и спрайт-атласы
позволяют пакетировать спрайты, минимизируя обращения к GPU:
PIXI.Container, если требуется
интерактивность, фильтры, маски и индивидуальное управление каждым
объектом.PIXI.ParticleContainer для большого
количества однотипных спрайтов без сложной интерактивности.Тестирование показывает:
| Кол-во объектов | Обычный Container FPS | ParticleContainer FPS |
|---|---|---|
| 500 | 60 | 60 |
| 1000 | 45 | 60 |
| 5000 | 15 | 55 |
Использование специализированных контейнеров позволяет поддерживать высокий FPS даже при тысячах элементов на сцене, тогда как обычный контейнер начинает сильно тормозить.
Выбор между стандартным Container и
ParticleContainer напрямую зависит от сценария:
ParticleContainer.Container.Использование правильного контейнера критично для высокопроизводительных 2D-сцен, игр и визуализаций в PixiJS.