Notice: file_put_contents(): Write of 5090 bytes failed with errno=28 No space left on device in /var/www/group-telegram/post.php on line 50

Warning: file_put_contents(): Only 8192 of 13282 bytes written, possibly out of free disk space in /var/www/group-telegram/post.php on line 50
Геймдев, который мы заслужили | Telegram Webview: korovany/903 -
Telegram Group & Telegram Channel
Сегодня все пишут про то, как какой-то парень ускорил загрузки в GTA Online на 70% с помощью DLL-инъекций. Весь патч занимает чуть больше ста строк на Си, а основным виновником долгих загрузок стал парсинг 10-мегабайтного JSON-файла.

В комментариях как всегда начали размышлять, почему Rockstar не починили это раньше, если все так просто. На самом деле, вопрос вполне себе релевантный, но...

Наверное любой, кто играл в GTA V в онлайне, замечал сверхдолгие загрузки. Сомневаюсь, что Rockstar были не в курсе проблемы. И, скорее всего, официальный фикс на деле окажется не таким простым, как может казаться со стороны. Все-таки этот патч — больше хак, чем решение проблемы. Но другого от человека, у которого нет доступ к исходникам, ожидать и не надо.

Посмотрим на первый из двух хаков — кеширование длинных строчек. Он тут самый безобидный и к нему меньше всего вопросов. Rockstar решили использовать sscanf для последовательного чтения всего JSON-файла, а большинство имплементаций функции вызывают во время работы strlen.

В общем для тех, кто не знаком с Си и C++ объясню просто: это очень неуклюжий и наивный способ парсинга с высокой алгоритмической сложностью (наверное, что-то около квадратичной, что для парсера вообще неприемлемо), крайне быстро становящийся медленным на больших файлах.

Автор решил кешировать указатели на начало и конец длинных строк, сокращая количество вызовов strlen. Для закешированной строки способ узнать ее размер будет заключаться в простой арифметике с указателями, где сначала мы проверяем, не выходим ли мы за границы строки, а потом просто вычитаем из конца текущую позицию. Worst-case scenario тут останется прежним (вызов strlen), но медиана станет намного быстрее.

Второй хак намного проще. При парсинге JSON (а в нем, судя по всему, содержится информация о всех предметах, которые можно купить за игровые деньги) и добавлении информации о новом предмете в структуру данных зачем-то проверяется уникальность добавляемого предмета. Автор выяснил (надеюсь на это), что дубликатов в JSON быть не может, и просто скипнул проверку, вставляя новые элементы в массив без нее. Безопасно ли это — большой вопрос. Почему проверка была там в первую очередь, если позиции должны быть уникальными?

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

Лишь в одном я со многими комментаторами соглашусь. Оставлять в игре проблему долгих загрузок не решенной на протяжении многих лет — крайне неуважительно по отношению к игрокам. Представим, что при должной оптимизации они могли бы сократить загрузки если не на 70%, то хотя бы на 50%. А это уже 3 минуты выигрыша для каждого игрока каждый раз, когда он запускает игру.

В общем, ждем официального иска ответа Rockstar, если он вообще будет. Вдруг что-то да починят.



group-telegram.com/korovany/903
Create:
Last Update:

Сегодня все пишут про то, как какой-то парень ускорил загрузки в GTA Online на 70% с помощью DLL-инъекций. Весь патч занимает чуть больше ста строк на Си, а основным виновником долгих загрузок стал парсинг 10-мегабайтного JSON-файла.

В комментариях как всегда начали размышлять, почему Rockstar не починили это раньше, если все так просто. На самом деле, вопрос вполне себе релевантный, но...

Наверное любой, кто играл в GTA V в онлайне, замечал сверхдолгие загрузки. Сомневаюсь, что Rockstar были не в курсе проблемы. И, скорее всего, официальный фикс на деле окажется не таким простым, как может казаться со стороны. Все-таки этот патч — больше хак, чем решение проблемы. Но другого от человека, у которого нет доступ к исходникам, ожидать и не надо.

Посмотрим на первый из двух хаков — кеширование длинных строчек. Он тут самый безобидный и к нему меньше всего вопросов. Rockstar решили использовать sscanf для последовательного чтения всего JSON-файла, а большинство имплементаций функции вызывают во время работы strlen.

В общем для тех, кто не знаком с Си и C++ объясню просто: это очень неуклюжий и наивный способ парсинга с высокой алгоритмической сложностью (наверное, что-то около квадратичной, что для парсера вообще неприемлемо), крайне быстро становящийся медленным на больших файлах.

Автор решил кешировать указатели на начало и конец длинных строк, сокращая количество вызовов strlen. Для закешированной строки способ узнать ее размер будет заключаться в простой арифметике с указателями, где сначала мы проверяем, не выходим ли мы за границы строки, а потом просто вычитаем из конца текущую позицию. Worst-case scenario тут останется прежним (вызов strlen), но медиана станет намного быстрее.

Второй хак намного проще. При парсинге JSON (а в нем, судя по всему, содержится информация о всех предметах, которые можно купить за игровые деньги) и добавлении информации о новом предмете в структуру данных зачем-то проверяется уникальность добавляемого предмета. Автор выяснил (надеюсь на это), что дубликатов в JSON быть не может, и просто скипнул проверку, вставляя новые элементы в массив без нее. Безопасно ли это — большой вопрос. Почему проверка была там в первую очередь, если позиции должны быть уникальными?

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

Лишь в одном я со многими комментаторами соглашусь. Оставлять в игре проблему долгих загрузок не решенной на протяжении многих лет — крайне неуважительно по отношению к игрокам. Представим, что при должной оптимизации они могли бы сократить загрузки если не на 70%, то хотя бы на 50%. А это уже 3 минуты выигрыша для каждого игрока каждый раз, когда он запускает игру.

В общем, ждем официального иска ответа Rockstar, если он вообще будет. Вдруг что-то да починят.

BY Геймдев, который мы заслужили




Share with your friend now:
group-telegram.com/korovany/903

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

"And that set off kind of a battle royale for control of the platform that Durov eventually lost," said Nathalie Maréchal of the Washington advocacy group Ranking Digital Rights. "Like the bombing of the maternity ward in Mariupol," he said, "Even before it hits the news, you see the videos on the Telegram channels." Founder Pavel Durov says tech is meant to set you free There was another possible development: Reuters also reported that Ukraine said that Belarus could soon join the invasion of Ukraine. However, the AFP, citing a Pentagon official, said the U.S. hasn’t yet seen evidence that Belarusian troops are in Ukraine. But Telegram says people want to keep their chat history when they get a new phone, and they like having a data backup that will sync their chats across multiple devices. And that is why they let people choose whether they want their messages to be encrypted or not. When not turned on, though, chats are stored on Telegram's services, which are scattered throughout the world. But it has "disclosed 0 bytes of user data to third parties, including governments," Telegram states on its website.
from id


Telegram Геймдев, который мы заслужили
FROM American