Grand Theft Auto Online отличается чудовищно долгими загрузками — на них жаловались ещё семь лет назад, когда игра только стартовала, и продолжают жаловаться сейчас. Некто T0ST утверждает, что разобрался в проблеме, нашёл один из основных источников бед и сумел сократить загрузки почти на 69 %.
Для начала — замеры автора и конфигурация его PC.
Как подчёркивает T0ST, он прекрасно знает — PC у него староват. Но вряд ли сборка настолько дряхлая, что онлайн загружается аж в шесть раз медленнее сюжетного режима. Кроме того, он нашёл свежий опрос на Reddit, по результатам которого 80 % из 271 участника пережидают в GTA Online загрузки от трёх минут или больше.
В общем, T0ST надел плащ хакермена и начал раскопки. Сперва он обнаружил, что во время загрузки GTA Online есть период длиной больше 4 минут, когда одно из ядер процессора нагружается как следует, а накопитель, поток сетевых данных, ОЗУ и видеокарта практически простаивают. По наблюдениям T0ST, это начинается, когда GTAV загрузила всё, что касается одновременно сюжетного и сетевого режимов, и приступает к обработке данных, необходимых только для сетевого режима.
T0ST сделал вывод, что дело в очень плохом коде. Применив программистскую магию, он разобрал процессы GTAV на составляющие и выяснил, что в период нагрузки на одно ядро происходит синтаксический анализ файла JSON размером 10 мегабайт, куда входит около 63 000 записей. По мнению T0ST, в этом JSON хранятся данные товаров во внутриигровых магазинах (но напрямую с микротранзакциями они не связаны).
Как рассказывает T0ST, 10 мегабайт записей — это не беда, но программная логика не оптимизирована и читает эти данные слишком дотошно. С этим связана и вторая существенная проблема — программисты Rockstar не сделали толковое хеширование, из-за чего происходит чересчур много перепроверок данных.
Чтобы проверить свои догадки, T0ST собрал самопальную DLL-библиотеку и всунул её в GTAV. Она добавляет кеширование для анализа JSON и убирает ненужные проверки дублирования записей.
Результат загрузок GTA Online:
T0ST пишет, что это не устранит вообще все проблемы с загрузками GTA Online на всех системах, но такая дыра в коде, мол, обнаруживается элементарным образом. «Если Rockstar каким-то образом это увидит — решение проблемы не должно занять больше одного дня и одного разработчика. Пожалуйста, сделайте с этим что-нибудь :<» — заканчивает своё расследование T0ST.
Подробнее изучить методику поиска можно в оригинальном посте. Осторожно: для понимания всего происходящего необходимы навыки программиста.