DiffChange objects tend to have a lot of data in the info blob. We should avoid:
- loading the info blob from the database, if it is not needed
- unserializing the info blob
- unserializing the diff array in the info blob
- instantiating Diff objects, if not needed
It seems like the only reason to look into the diff when dispatching changes is to find out whether the change added a sitelink. We could store that information separately, e.g. in a separate field in the info blob.
See T109088: [Task] Profiling and investigate how to improve performance of change dispatcher for the rationale.
NOTE: We may not need to unserialize change info at all, if we can remove the need of programmatic filtering. See in particular T111161: Subscribe client wikis immediately after adding sitelinks
NOTE: We may not need to put diffs into changes at all, see in particular T111356: [Story] wb_changes.change_info should only contain the minimum of information required for processing the change on the client.