Сначала измерьте
Не оптимизируйте вслепую. Включите fps в конфиге и посмотрите, падает ли время кадра в update или в отрисовке. Если просадка только когда камера едет по большой tilemap — это cull и слои, а не «медленный JS».
Не трогайте то, что спит
Самая дорогая привычка — в update обходить все спрайты мира. Держите активный набор: враги в камере, пули в полёте. Остальное setActive(false).setVisible(false) или в пуле.
Группы и group.get здесь полезнее, чем new Sprite каждый выстрел.
Текстуры
Сто PNG — сто загрузок и сто свапов текстур. Соберите атлас. Анимации через anims и spritesheet, не через смену setTexture каждый кадр.
Картинки больше экрана уменьшайте до реального размера отрисовки. Scale Manager не сжимает видеопамять сам по себе.
Частицы и текст
Эмиттер на максимуме легко съедает кадр. Режьте quantity, lifespan и не запускайте пять взрывов в одной точке. Текст с тенью и stroke дороже обычного. Для урона — один BitmapText, не десяток Text.
Камера и тайлы
На больших картах оставьте только видимые слои. Коллизии — отдельный слой, не весь тайлсет. Камера с startFollow не должна дергать roundPixels туда-сюда без нужды: это даёт микрошум и лишние пересчёты.
Список на вечер
Атлас вместо россыпи файлов. Пулы пуль и врагов. Пустой update у невидимых объектов. Один эмиттер на тип эффекта. Физика только там, где есть тела. Если после этого FPS живой на телефоне — остальное уже полировка.