Garry's Mod - Минификация кода сервера
Подойдет тем, у кого сервер работает на VDS/Dedicated server с Linux на борту (хостинг без доступа к консоли не подойдет)
По просьбам участников форума быренько рассказываю, что за минификация, зачем она нужна и как ее автоматизировать, а также какие проблемы могут с ней возникнуть.
У нас на VDS будет 2 игровых сервера: запароленный DEV сервер и публичный PROD. На проде играют игроки, на DEV мы пишем код. На DEV код у нас в исходном виде (без кракозябров и буллшита), на проде код минифицирован, еще и упакован в одну единственную папку, если вы решили сделать, как я писал ранее. Когда мы захотим выпустить обнову на прод – выполним простой deploy.sh
скрипт и все произойдет автоматически за 2 секунды.
🤔 Что такое минификация
Минификация это сжатие кода. Ниже пример с одной функцией. Когда функций очень много, то разница заметна намного и НАМНОГО сильнее.
-- Какой-то комментарий к коду, который удалится
local function SomeFunctionName(someVar1, someVar2)
return someVar1 * someVar2
end
local CONSTANT_VAR = SomeFunctionName(123, 321)
print(CONSTANT_VAR)
local function a(b,c)return b*c end local d=a(123,321)print(d)
Чаще всего минификацию применяют в браузере (js). Это делают, чтобы скрипт занимал меньше места и страница быстрее грузилась. Вот оригинальный скрипт jQuery, вот минифицированный. Не хило так заметно разницу, эге?
😎 Чем полезна в гмоде
В нашем случае мы будем делать это для того, чтобы воришкам кода пришлось попотеть, чтобы найти в нашем коде что-то интересное, а потом еще попотеть, чтобы превратить непонятную кашу букв и цифр во что-то читабельное (если все-таки что-то найдут 😸). Просто представьте их лицо, когда они увидят кашу букв и цифр
Для тех, кто не в курсе. В гмоде существует понятие ScriptHook. При помощи скриптхука ЛЮБОЙ человек может украсть ваш код, который выполняется на клиенте (интерфейсы, визуальные эффекты, анимации), даже если у вас стоит античит.
Еще в гмоде часто происходят утечки полных сборок, включая и серверную часть. Т.е. вообще все файлы. Украденная сборка с файлами-уродами будет непригодна для использования, если их не нормализировать, на что потребуется очень много времени (возможно, месяцы или даже годы)
В теории минификация также может и ускорить запуск Garry's Mod сервера.
👌 Проблемы и решения
У меня хостинг
Решение писать не планирую
Если у вас хостинг лишь с доступом к файлам по FTP, то автоматизировать деплой минифицированных файлов возможно, но сложно. Проще базово разобраться с Linux 🐧
Отладка кода
Решено наполовину
Минифицированный файл это код, превращенный в 1 строку. Если в минифицированном коде случится ошибка, то найти ее будет сложнее.
+- Решение – установите GLuaFixer (glualint) (можно в VSCode или SublimeText) и используйте в нем функцию Pretty Print. Она, как минимум, отформатирует код так, чтобы он был не однострочным и искать проблему станет проще.
Поиск минификатора
Решено
- Скрипты в гмоде пишутся на gLua. Он похож на Lua, но со своими синтаксическими "приколами", из-за которых обычные Lua минификаторы нам не подойдут (не умеют понимать
!, !=, continue
и тд). - Некоторые минификаторы не умеют понимать, что переменная является ГЛОБАЛЬНОЙ и ее нельзя переименовывать (например somelib в b)
Спустя несколько лет поиска, на свет таки появился "правильный" минификатор, который неплохо работает с glua: https://github.com/xUnkNx/glua-minify. Его мы и будем использовать.