I have had success with the following techniques :
P.S. This answer lists only those techniques that help reduce the initial response time of a web server. Putting stuff on CDN, minification/concatenation of JS/CSS etc speed up loading of additional resources, not response time of your website.
If possible deploy your website in multiple regions. Depending on the location of the user, serve your initial HTML from the appropriate data center.
Always cache pages for anonymous users as they are most likely lurkers. So, you won't need to load user details and other stuff. Also, no need to make extra DB calls. Just cache these pages and serve them to the non-logged in users. Once they login you can read from DB.
Don't load too much data on the initial render. In case you have a blog or a website which offers a feed, load as much as the user needs and then load more items as the user scrolls down. For instance, loading 5 items initially will be faster than loading 25 items.
Use some kind of cache layer on the top of your DB. Cache most frequently accessed items in Redis/Memcached or in a similar in-memory store. You don't have to read items from Database always.
Use Nginx/Varnish and leverage their caching mechanism.
I always keep these things in mind while building web apps. Hope this helps you!