In most cases of mail threading/aggregation and all cases of events we could hugely optimize by only returning subset of results.
For events, returning only events for current month would mean that calendaring apps would not longer consume tons of memory and would definitely speed up everything. Problem is with recurring events: those probably need to have range first occurrence-last occurrence (instead of first occurrence start-first occurrence end, like we would with non-recurrent events). The recurrence would have to be computed by Serializer then. Could get expensive?
For emails, requesting only emails from past XX days/weeks/... would mean populating the message list instantly and then fetch the rest in background while users can already read and work with the emails they see (and that are most probably the most relevant for them).