A fundamental trade-off in dynamic websites is, well, they're dynamic. Each time a user requests a page, the web server makes all sorts of calculations, from database queries to template rendering to business logic to creating the page that your site's visitors see. This is a lot more expensive, from a processing-overhead perspective, than your standard read-a-file-off-the-filesystem server arrangement.
For most web applications, this overhead isn't a big deal. Most web applications aren't www.washingtonpost.com or www.slashdot.org; they're simply small- to medium-sized sites with so-so traffic. But for medium-to high-traffic sites, it's essential to cut as much overhead as possible.
That's where caching comes in. To cache something is to save the result of an expensive calculation so that you don't have to perform the calculation next time. Here's some pseudocode explaining how this would work for a dynamically generated web page:
given a URL, try finding...