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

The news also helped traders look past another report showing decades-high inflation and shake off some of the volatility from recent sessions. The Bureau of Labor Statistics' February Consumer Price Index (CPI) this week showed another surge in prices even before Russia escalated its attacks in Ukraine. The headline CPI — soaring 7.9% over last year — underscored the sticky inflationary pressures reverberating across the U.S. economy, with everything from groceries to rents and airline fares getting more expensive for everyday consumers. Messages are not fully encrypted by default. That means the company could, in theory, access the content of the messages, or be forced to hand over the data at the request of a government. "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." However, the perpetrators of such frauds are now adopting new methods and technologies to defraud the investors. Perpetrators of these scams will create a public group on Telegram to promote these investment packages that are usually accompanied by fake testimonies and sometimes advertised as being Shariah-compliant. Interested investors will be asked to directly message the representatives to begin investing in the various investment packages offered.
from jp


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