Автор, конечно, молодец. Жаль, что Rockstar плевать. Если бы они хотели решить проблему, которая тянется ещё со времён PS3, они бы уже давно это сделали.
Энтузиаст утверждает, что нашёл причину долгих загрузок в GTA Online и сократил их на 69 %
Grand Theft Auto Online отличается чудовищно долгими загрузками — на них жаловались ещё семь лет назад, когда игра только стартовала, и продолжают жаловаться сейчас. Некто T0ST утверждает, что разобрался в проблеме, нашёл один из основных источников бед и сумел сократить загрузки почти на 69 %.
Для начала — замеры автора и конфигурация его PC.
- Сюжетный режим загружается примерно за 1 минуту 10 секунд.
- Онлайн-режим загружается примерно за 6 минут.
- Стартовое меню отключено, вход в Social Club не учитывается, время считается от логотипа Rockstar Games до геймплея.
- Компьютер:
- процессор — AMD FX-8350,
- SSD — Kingston SA400S37120G,
- оперативная память — две Kingston 8 192 Мб (DDR3-1337) 99U5471,
- видеокарта — GeForce GTX 1070.
Как подчёркивает 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:
- Без патчей — около 6 минут.
- С патчем на устранение проверок дублирования — 4 минуты 30 секунд.
- С патчем парсинга JSON — 2 минуты 50 секунд.
- С обоими патчами одновременно — 1 минута 50 секунд, то есть на 69.4 % быстрее, чем в оригинальной версии.
T0ST пишет, что это не устранит вообще все проблемы с загрузками GTA Online на всех системах, но такая дыра в коде, мол, обнаруживается элементарным образом. «Если Rockstar каким-то образом это увидит — решение проблемы не должно занять больше одного дня и одного разработчика. Пожалуйста, сделайте с этим что-нибудь :<» — заканчивает своё расследование T0ST.
Подробнее изучить методику поиска можно в оригинальном посте. Осторожно: для понимания всего происходящего необходимы навыки программиста.
Лучшие комментарии
пусть возьмут его на работу!
ты серьезно так думаешь?? единственное, что умеет делать rockstar/take2 в данной ситуации- подавать на человека в суд за нарушение А.П. (и распространение читов?), к сожалению
Ни в коем случае я не жалуюсь, я словил неистовые лулзы
Несложно догадаться по вашей аватарке.
А вместо благодарности ему прилетит иск от ТэйкТу — за неправомерное копание в собственности компании ТэйкТу.
Следующая новость: «Take Two подали в суд на энтузиаста и заставила его удалить все данные о разработке»
Да срали рокстары на оптимизацию. Если игра приносит баблишко, они будут только что и делать, что добавлять микротранзакции и прочий мусор. Им же нужны только бабки)
Копнул хорошо. Вот только тем, кто действительно может это править — плевать. Оно ж и так работает, чего менять-то. Грустно.
Один и тот же кусок кода с Stack Overflow скопировали
В идеальном мире один день, а в нашем — недели две минимум :\ Это ж в спринт запихать, менеджера выделить, трудозатраты оценить, по приоритетности оно тоже окажется в… ну… не очень высоко. Потом когда очередь дойдет запрогать — еще протестировать это всё… Хотя мало ли, вдруг рокстары чуть менее бюрократы х)
Причём срут на оптмизацию они очень успешно. За последние 5 лет фпс в онлайне становится всё ниже и ниже, когда в одиночке он космически высокий
Да там и комьюнити получше будет. Все друг с другом здороваются, на чужие доставки самогонов/товаров никто не нападает, зверьё усыплять помогают. Откровенных читеров давно не видела, да и те что были агрессии не проявляли. Даже как-то странно что в РДО играют настолько нетоксичные люди.
Я немного расскажу о своём знакомстве с рдр онлайн, пришеди в город, меня связали четверо джентльменов, начали делать отсылки к гачи, после моего скоропостижного суицида, я появился не очень далеко от места преступления, в скоро времени меня обнаружили и началась стремительная погоня с финалом испускания моего духа, и это продолжалось часа три. Ни в коем случае я не жалуюсь, я словил неистовые лулзы, но люди более… Эмоциональные что-ли могли б как минимум заплакать)
единственное, что умеет делать rockstar/take2 в данной ситуации- подавать на человека в суд за нарушение А.П. (и распространение читов?)
Наглядная и безапеляционная демонстрация отношения Рокстар к пользователям и оптимизации, коли за семь лет так и не исправили проблему, требующую меньше суток и одного программиста.
Бабы
Вот мне кажется, что все те, кто делают всякие медленные многоэтапные интерфейсы\экраны статистики — так и думают. И пофиг им, что человек заходит поиграть, например, с 8 до 12, и от того что он грузится\втыкает в эти экраны половину времени — на подольше он не задержится. Зато это время он, фактически, не участвует в онлайн-активности, т.е. реально активный онлайн от этого только снижается. Т.е. в поиске матча могло быть, например, 100к людей, но будет вдвое меньше, т.к. половина в это время проматывает не пропускаемую одним кликом статистику, грузится в меню, грузит интерфейс и прочее-прочее.
Если вдруг кому интересно узнать подробнее, на Хабре есть хороший перевод этого поста.
На самом деле это типичный пример алгоритма, достаточно быстрого чтоб попасть в продакшен, но достаточно медленного, чтоб вызвать проблемы на больших данных. Такое часто бывает, и в крупных проектах в том числе. «Сейчас сделаем чтоб работало, а затем поправим, вот я даже таску создал чтоб не забыть». И эта таска висит потом годами в низком приоритете. Лично мне непонятно почему они делали нативный парсер, хотя есть сколько угодно библиотек, которые делают это правильно. Ну а раз уж делали, то должны же быть юнит-тесты, которые выявят проблемы парсера.
Самое интересное, что в RDR Online проблему частично решили. По сравнению, с ГТА: О, там загрузки намного быстрее, а иногда прям космически быстрее
Нет, просто тупую одинаковую ошибку допустили два разных человека. Так бывает