The primary difference between component events and application events is that a component event does not have the default phase, and hence, it cannot be used if two components are not part of the same tree.
Syntactically, they defer from an application by requiring a name for the handler, and they do not use the $A global provider.
Also, note that the default event propagation rules for capture and bubbling are exactly the same as those we discussed in the previous section. A default handler without a phase parameter in aura:handler indicates the bubble phase.
Component events are more performant; unless you need application events, you should always use component events.