We are currently going in the opposite way. Even the Metadata event should not have nip05 and lightning addresses since those are not used by majority of Nostr applications. Sticking everything into just one event doesn't make much sense. The UI doesn't need to show different lists, but underneath it, there are dozens of lists already.
Discussion
It's quite dispersive, IMO.
I should be able to fetch all the profile important stuff with a single REQ: basic metadata, outbox relays, DM relays.
> since those are not used by majority of Nostr applications.
This make little sense to me, doing a separate REQ to fetch a single piece of data of few bytes seems a waste of resources, and you have also to manage the case where the event is missing.
You can do the multiple kinds you need in just one REQ. I don't get the problem at all.
Sure, but you are still using more resources (from client and relay) than using a single event. What I don't grasp is this urgency to fracture the profile data, given its small size.
It's mostly PTSD from our massive follow lists and bookmark lists that break about half of the relays out there. We know shit breaks with large events.
Also, I would argue the opposite. Apps that don't use certain fields should not be forced to keep them in memory. Each app just downloads the exact content they need and leave bigger apps like Amethyst to suffer a bit with added memory. It's fine.
I never talked about following lists, these should stay separated, and maybe re-thinked to avoid the problems caused by the atomic structure.
About memory usage, we should reason keeping in consideration the real sizes: an average profile with 10 relays takes less than 1000 bytes, and the client can easily discard the useless data from memory as soon as it has been received.
Only if you need to download all the things, which most apps will never need to.
Everyone interacts with the same handful of people over and over. Just cache that data and background-sync it, periodically, so that the cache doesn't go stale.
The number of events is irrelevant, if you structure your fetches efficiently, and do some smart caching.