I think this is an excellent question; one for which I felt compelled to Google for an answer.
The argument for putting script assets at the bottom of the page was to prevent blocking a browser's renderer that could otherwise be painting pixels on the screen to keep the user busy while the rest of the page's functionality loaded. With HTTP streaming, we're talking about being able to do something about the server being the bottleneck. While we wait for all those expensive database queries and backend service calls to finish, we can load JS/CSS assets.
It seems to me that there's a tipping point around which you should <head> your assets or not <head> your assets. This is only a net performance gain if your JS/CSS assets can be downloaded before your server has the rest of the response ready.
Don't <head> a page's assets if:
- You're serving the page out of a server-side cache
- Your server's response time is faster than your JS/CSS' actual asset load time (when calculating load time, consider carefully whether those assets are likely to have already been cached on the client side or not)
Do <head> a page's assets if:
- Your server's takes longer to respond than it would take to load all of your JS/CSS assets while waiting
Does that sound about right?