If you watch your windows processes you can see "csc.exe" ticking away. Basically yeah asp is compiling all the widgets and things on the page. Subsiquent requests (as you can see) don't get this hit. Anytime csc seems to be running the entire site just in unresponsive until it completes. We have lots of pages with lots of concurrent users so when we recycle god I WISH it was only 20 seconds, we're talking maybe 5 minutes to come back. It's like all the pages or requests go into a queue to be popped off. If I recycle the same site in the middle of the night when there's nobody on it, we're back down to the 20-30 seconds....but then it's per page. So if I go somewhere else, it's another 20-30 seconds.
There's basically nothing you can do, the more customization\widgets on a page, the worse it gets. They have a precompilation tool which doesn't at all help with loadtimes on the frontend, however it does seem to work on speeding up the backend requests.
Nothing Junior recommends will make any real *noticable* difference.
Basically, you need to stop it from going idle.
In addition to the IIS Initialization module, you have 2 main paths...
1. Use an external "ping" service, to access a specific page every 10mins (or whatever)
There are plenty of these services available on the internet.
2. Use an internal "ping" IIS task to access the website every 10 mins (or whatever)
Personally, I took the 2nd path for our sites (still on IIS 7.5) and the sites are always responsive... but your mileage may vary.
There are lots of examples that can be Googled, but perhaps this might give you some pointers...