Ну, у вас есть два варианта.
- Вы можете сериализовать состояние A и состояние B и запустить результаты сравнения. (Как вы описываете).
или
- Вы можете использовать знание структуры, чтобы найти разницу между состоянием A и состоянием B и сериализовать структурную разницу.
Что сводится к этому - структура данных определена таким образом, что взятие дельты быстрее, чем выполнение различий общего назначения?
Я верю, что это часто так. Давайте возьмем простой пример. Наш игровой мир определяет два элемента P1 и P2 (они бегают по всему миру) в любой момент времени, когда игровое состояние определяется как P1 (x, y, z) и P2 (x, y, z). Таким образом, структурная дельта - это разница между 6 переменными (x, y, z для двух игроков). Вычислить это быстро - это 3 математических операции. Тем не менее, кто знает, как они будут сериализованы - и тогда программе diff придется проделать большую работу (по крайней мере, один цикл), чтобы найти дельту результата.
Но это становится даже лучше, чем это. Поскольку ваш игровой движок знает, что вы заботитесь о дельтах по мере изменения ситуации, он может хранить дельты в списке и быть готовым отправлять дельты без каких-либо вычислений (например, каждый раз, когда P перемещает, он сохраняет изменения).