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: |

Friday’s performance was part of a larger shift. For the week, the Dow, S&P 500 and Nasdaq fell 2%, 2.9%, and 3.5%, respectively. Since its launch in 2013, Telegram has grown from a simple messaging app to a broadcast network. Its user base isn’t as vast as WhatsApp’s, and its broadcast platform is a fraction the size of Twitter, but it’s nonetheless showing its use. While Telegram has been embroiled in controversy for much of its life, it has become a vital source of communication during the invasion of Ukraine. But, if all of this is new to you, let us explain, dear friends, what on Earth a Telegram is meant to be, and why you should, or should not, need to care. Either way, Durov says that he withdrew his resignation but that he was ousted from his company anyway. Subsequently, control of the company was reportedly handed to oligarchs Alisher Usmanov and Igor Sechin, both allegedly close associates of Russian leader Vladimir Putin. Some people used the platform to organize ahead of the storming of the U.S. Capitol in January 2021, and last month Senator Mark Warner sent a letter to Durov urging him to curb Russian information operations on Telegram. Russian President Vladimir Putin launched Russia's invasion of Ukraine in the early-morning hours of February 24, targeting several key cities with military strikes.
from sa


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