EntityChange (resp DiffChange) currently holds a full Diff representing the change (except for modifications to statements, which get suppressed for performance reasons, see commit 3160ff902fa). Such diffs can be large, and are rather slow to serialize and unserialize. We should use a compact representation instead, containing just the information we actually need on the client in order to process the change. A nested JSON-esque array structure could be used, providing the following infomration:
- Sitelinks: siteid -> oldvalue + newvalue; (also: +/- badge?)
- Labels (+descriptions): list of affected language codes
- Statements: list of affected properties
This should be a lot more compact, faster to unserialize, use less memory, and be easier to handle on the client.