We have need to run through every object in an org to determine which ones have certain fields our app needs. We ONLY care about the actual objects (case, campaign, contract, custom objects, etc...). But doing a global describe on objects returns CampaignShare, CampaignFeed, etc...

I noticed four suffixes: \*Share, \*Feed, \*History, \*ChangeEvent

I want to skip these entirely as it just adds to execution time for our loop. Is there anyway to determine if an object is an object that actually shows up in the Objects tab in an org, and not its share, feed, history, or changeevent? Or is the only option for this to check if its name ends with one of these suffixes?