Grand Theft Auto 5 31733
Аватар Evernews Evernews

Фанатский патч для GTA Online ускорил загрузку в 3 раза

10
0
Поделиться
Телеграфировать

Будет неплохо, если разработчики его изучат и реализуют аналогичные улучшения сами

Фанатский патч для GTA Online ускорил загрузку в 3 раза

Онлайн-режим Grand Theft Auto 5 грузится очень долго: в некоторых случаях его полная загрузка может занимать больше десяти минут, это гораздо дольше, чем загрузка одиночного режима. Латвийский инженер под ником t0st, играющий в GTA Online, решил разобраться, в чем тут дело.

Проведя несколько экспериментов, t0st выяснил, что на его PC (AMD FX-8350, SSD-накопитель Kingston и 16 гигабайт DDR3) одиночная кампания грузится 70 секунд, а мультиплеер — в среднем 360 секунд. Опросы среди фанатов показывали, что может быть и хуже.

Инженер заметил, что увеличение производительности PC по-разному влияет на скорость загрузки мультиплеера и одиночного режима. У игроков с мощным железом GTA Online могла грузиться за пару минут, но загрузка сюжета не ускорялась. Значит, есть простор для оптимизации.

Затем t0st решил посмотреть, как вообще происходит загрузка онлайн-режима. Оказалось, что большую часть времени GTA Online грузит на 100% одно из ядер процессора, не создавая нагрузку ни на сеть, ни на диск, ни на память. Это было странно.

Чтобы найти суть проблемы, инженер запустил GTA Online под профайлером и обнаружил пару мест, где во время загрузки игра проводила больше всего времени. Затем нужные места были изучены с помощью дизассемблера и x64dbg.

Оказалось, что большую часть времени при загрузке игра тратит на парсинг гигантского JSON-объекта весом примерно в 10 мегабайт. Внутри у него порядка 63 тысяч записей; скорее всего, полагает t0st, это каталог всех предметов, которые можно купить в игре.

Изучив парсер JSON и обработку файла, t0st пришел к выводу, что код работает крайне неоптимально. Например, при добавлении нового элемента из JSON в игровые данные происходит поиск по всему массиву уже добавленных уникальных ключей вместо использования hashmap или похожих быстрых решений.

Кроме того, оказалось, что все идентификаторы и элементы в JSON и так уникальны — проверять их еще раз нет никакого смысла. Так или иначе, t0st понял, что проблему можно устранить: нужно лишь сделать неофициальный патч.

Инженер переопределил пару функций, использовавшихся при обработке JSON, убрав из них ресурсоемкие, но бессмысленные проверки. К сожалению, код привязан к адресному пространству игры, после выхода официального патча оно может изменить.

После патча загрузка GTA Online ускорилась с приблизительно 360 секунд до примерно 110 секунд — то есть более чем в три раза. Инженер надеется, что разработчики из Rockstar Games обратят внимание на его эксперимент и сделают разбор JSON более эффективным.

Теги: Grand Theft Auto 5, Игры
Аватар Evernews
Evernews
8066 подписчиков