I am currently using CharacterAdded but I might switch to CharacterAppearanceLoaded depending on the poll and replies.
This thread might not be relevant in the near future but we have been waiting 5 months for this to happen Avatar Loading Event Ordering Improvements and we need a better solution now.
I have always used CharacterAdded, I never really thought about doing CharacterAppearanceLoaded nor did I really know that was an option . Also, I did not know that those warnings were because of CharacterAdded.
Why reliability? It depends on your use, really. For me, the documentation articles states it clearly that:
CharacterAdded will fire “when a player’s character spawns (or respawns).” This event fires soon after setting Player.Character to a non-nil value or calling Player:LoadCharacter.
On the other hand, CharacterAppearanceLoaded will fire “when the the full appearance of a Player 's Player.Character has been inserted.” By the word ‘full appearance’, it means the objects that will be parented to the character, typically clothes and accessories.
Differences? CharacterAdded will fire first before CharacterAppearanceLoaded because without your character, the shirts, pants, and accessories will not be parented to anything and therefore will not fire before the character loads (which fires CharacterAdded).
The time between the event firings shouldn’t be too long, though, perhaps just few seconds or less.
CharacterAdded because I have no business needing to know when a character’s appearance has loaded.
There really is no comparison here. CharacterAdded and CharacterAppearanceLoaded are two different functions each serving their own purpose. The thread suggests that they can be used interchangeably and similarly when they can’t and shouldn’t be. Which one you choose to use is heavily use case dependent.
CharacterAdded should be used in cases where you only require the presence of a player’s character to act. CharacterAppearanceLoaded should be used in the case that you need an event to fire after a character’s outfit loads.
Despite all this, the issues with CAL (e.g. not firing for blank appearances, thus hanging threads) make it undesirable for use. I’d rather write my own handler for character appearance and loaded items rather than rely on CAL.