Notice: file_put_contents(): Write of 5089 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 13281 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: |

Individual messages can be fully encrypted. But the user has to turn on that function. It's not automatic, as it is on Signal and WhatsApp. Now safely in France with his spouse and three of his children, Kliuchnikov scrolls through Telegram to learn about the devastation happening in his home country. Telegram was co-founded by Pavel and Nikolai Durov, the brothers who had previously created VKontakte. VK is Russia’s equivalent of Facebook, a social network used for public and private messaging, audio and video sharing as well as online gaming. In January, SimpleWeb reported that VK was Russia’s fourth most-visited website, after Yandex, YouTube and Google’s Russian-language homepage. In 2016, Forbes’ Michael Solomon described Pavel Durov (pictured, below) as the “Mark Zuckerberg of Russia.” For tech stocks, “the main thing is yields,” Essaye said. The picture was mixed overseas. Hong Kong’s Hang Seng Index fell 1.6%, under pressure from U.S. regulatory scrutiny on New York-listed Chinese companies. Stocks were more buoyant in Europe, where Frankfurt’s DAX surged 1.4%.
from nl


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