← База знаний
Оптимизация

Хуки и таймеры без лишней нагрузки

Как не превратить Think и повторяющиеся таймеры в источник лагов.

Не делайте тяжёлую работу каждый кадр

Think, HUDPaint и похожие хуки вызываются очень часто. Внутри них нельзя постоянно читать файлы, выполнять SQL, искать все сущности или строить большие таблицы.

hook.Add("Think", "GML_LimitedThink", function()
    if (GMLNextThink or 0) > CurTime() then return end
    GMLNextThink = CurTime() + 0.25
    -- небольшая периодическая работа
end)

Имена должны быть уникальными

Используйте префикс аддона: GML_PlayerSpawn, а не PlayerSpawn1. При перезагрузке Lua хук с тем же именем заменится, а случайные имена могут накопить дубликаты.

Таймер или хук

Перед удалением сущности или игрока внутри отложенной функции всегда проверяйте IsValid. Для профилирования временно измеряйте длительность участка через SysTime, а затем убирайте диагностический спам.