Mobile Geräte sind in Bezug auf CPU/GPU und Speicher begrenzt. Daher ist die Skriptlogik auf Lua sollte extrem einfach sein: minimale Zuweisungen, weniger Arbeit in jedem Frame, vernünftige Arbeit mit Zeilen und Tabellen, sorgfältige Behandlung des Garbage Collectors (GC). Unten ist das "Skelett" der Optimierungen, mit denen Sie beginnen sollten.

1. Wir profilieren, wir raten nicht 🧭
Messen Sie, wo Zeit verloren geht: Verwenden Sie den Profiler Ihrer Engine (Defold, Solar2D/Corona usw.) und interne Timer. Ermitteln Sie heiß Funktionen und optimieren Sie diese zuerst.
local clock = os.clock
local function bench(fn, iters)
local t0 = clock()
for i=1,iters do fn() end
return (clock()-t0)*1000
end
print("ms:", bench(updateEnemies, 1000))2. Arbeit mit Speicher und GC 🧹
Verwenden Sie Tabellen wieder, anstatt häufig neue zu erstellen.
Vermeiden Sie Zuweisungen in
update()und Kollisionen.Sammeln Sie „Objektpools“ (entity pooling) für Projektile/Partikel.
-- Пул на таблицах
local pool = {}
local function acquire()
return table.remove(pool) or {x=0,y=0,vx=0,vy=0,alive=false}
end
local function release(obj)
obj.alive=false; obj.x=0; obj.y=0; obj.vx=0; obj.vy=0
pool[#pool+1]=obj
end3. Schnelle Variablen und Module ⚙️
lokale Variablen sind schneller als globale Variablen: Häufig verwendete Funktionen zwischenspeichern.
Speichern Sie Links zu Modulfunktionen in lokalen Variablen.
-- Было (медленнее из-за глобальных поисков):
function tick(dt) math.sin(dt); math.cos(dt) end
-- Стало (быстрее благодаря локальным ссылкам):
local sin, cos = math.sin, math.cos
function tick(dt) sin(dt); cos(dt) end4. Strings und Verkettung 🧵
Zeilen sind unveränderlich: Jede Verkettung erzeugt eine neue Zeile. Sammeln Sie die Teile in einer Tabelle und verwenden Sie table.concat.
-- Плохо:
local s = ""
for i=1,1000 do s = s .. i end
-- Хорошо:
local t = {}
for i=1,1000 do t[i]=i end
local s = table.concat(t, ",")5. Schleifen und Iteratoren 🔁
Bevorzugen Sie den numerischen
for, wo immer möglich.ipairsist bequem, aber numerischfor i=1,#tist oft schneller.pairsfür assoziative Tabellen und nicht an heißen Orten lassen.
-- Быстро:
for i=1,# arr do local v = arr[i]; -- Verarbeitung end6. Metatabellen und OOP 💼
Methoden über Metatabellen sind praktisch, aber unnötige Aufrufe und __index in Hot Paths kosten FPS. Greifen Sie an kritischen Stellen direkt auf Felder zu oder speichern Sie Methoden lokal zwischen.

TOP-Fehler von Lua-Anfängern
Fehler ❌ | Warum schlecht 🐌 | Wie man es behebt ✅ |
|---|---|---|
Erstellen neuer Tabellen für jedes Bild | GC-Spleißen, Mikrolagen | Objektpool, Reinigung und Wiederverwendung |
Verkettung von Zeilen in Schleifen | Viele Allokationen |
|
Global statt lokal | Langsamerer Zugriff | Zwischenspeichern in |
| Unvorhersehbare Reihenfolge/Kosten | Numerische |
Schwierige Logik in | FPS-Abzüge | Berechnungen durchführen, Aufgaben aufteilen, zwischenspeichern |
Laden von Assets "on the fly" | Friesen bei I/O | Vorladen, Atlanten, Audio-Streaming |
Beispiel „vorher/nachher“
-- До: много мусора и глобальных обращений
function spawnBullets(n)
for i=1,n do
local b = {x=0,y=0,vx=0,vy=0,alive=true}
table.insert(bullets, b)
end
end
-- После: пулы + локальные ссылки
local insert = table.insert
function spawnBullets(n)
for i=1,n do
local b = acquire() -- из пула
b.alive=true; b.x=0; b.y=0; b.vx=0; b.vy=0
insert(bullets, b)
end
endDie Lua-Optimierung auf Mobilgeräten ist eine Disziplin: Wir profilieren, eliminieren unnötige Zuweisungen, speichern Funktionen in local zwischen, arbeiten sorgfältig mit Strings und Schleifen, verwenden Pools und Atlanten. Beginnen Sie mit Messungen - und "entfernen" Sie gezielt Engpässe.
Kodik hilft, Optimierungsfähigkeiten zu verbessern: Mini-Lektionen, praktische Aufgaben, Tests und Tipps direkt in der App.
Und wir haben auch einen aktiven Telegram-Kanal, wo wir coole Ideen diskutieren, Erfahrungen teilen und Aufgaben gemeinsam analysieren — Lernen wird nicht nur nützlich, sondern auch unterhaltsam.
