Hi Tyler,
If you are using the official release packages I have no additional suggestions except you could remove some of the .resx files for languages you are not using from App_Data and remove extra skins you are not using form both /Data/skins and /Data/Sites/[SiteID]/skins.
If you are deploying your own builds that you've made from source code, make sure you are doing a rebuild of the solution in Release mode and not deploying a debug build and make sure <compilation debug="false" in Web.config.
Good hosting makes all the difference. If you are in a low memory environment what happens is when it reaches the memory limit set on the app pool it forces the app to recycle and that kills performance. If you see lots of frequent application start and end events being logged that is a sign of low memory, only better hosting with more available memory will solve it.
The AppKeepAlive is a hacky solution at best, it would be better to use an external service to make periodic requests to some pages in your site as mentioned at the bottom of the AppKeepAlive article.
Hope that helps,
Joe