Page Caching to Improve Website Performance

A web cache is an approach for the temporary storage (caching) of web documents, such as HTML pages and images, to reduce bandwidth usage and server load. The content of a webpage can be stored in a file temporarily so that every time server receives a request, it doesn’t need to process time and again. This is termed as Page Caching.

This is the fastest way to cache your content as opposed to going dynamically through the process of generating the content.  Content management systems have many pages that are a great fit for this approach, but account-based systems where people log in and manipulate their own data are often less likely candidates.

In this article, we will be going through a simple approach for achieving Page Caching.

Related Theory for Page Caching:

The basic idea behind Page Caching is to store a static rendered contents of a webpage in a file. Whenever server receives a request for the webpage, it first checks whether the webpage already has a cache file or not. If cache file is present, the content from the cache file is rendered in the browser without any further processing. And if no cache is present, all processing are done for displaying the webpage and then a cache file is created.

However, once a cache file is created, we will always get the same output even if the code in the webpage is changed. To get the changes in the output, we need to delete the cache file first. This clearing of cache can be done manually or by using cronjob in the server.

Basiacally, we need two files for this:

  • index.php (webpage that is to be cached)
  • functions.php (functions required for caching)

functions.php

<?php 

function getCurrentURL(){
  $isHTTPS = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on');
  $port = (isset($_SERVER['SERVER_PORT']) && ((!$isHTTPS && $_SERVER['SERVER_PORT']!="80") || ($isHTTPS && $_SERVER['SERVER_PORT']!="443")));
  $port = ($port)? ':'.$_SERVER['SERVER_PORT']: '';
  $url = ($isHTTPS? 'https://': 'http://').$_SERVER['HTTP_HOST'].$port.$_SERVER['REQUEST_URI'];
  return $url;
}

function cleanURL($url){
  $url = str_replace(' ','-',$url);
  $url = preg_replace('/[^A-Za-z0-9\-]/','',$url);
  return trim(preg_replace('/-+/','-',!empty($url)? strtolower($url):""),"=");
}

function setPageCaching($content){
  $url = "cache/".cleanURL(getCurrentURL());
  file_put_contents($url,$content,LOCK_EX);
  return true;
}

function getPageCaching(){
  $url = "cache/".cleanURL(getCurrentURL());
  if(file_exists($url)){
    return file_get_contents($url);
  }
  else{
    return false;
  }
}
?>

index.php

<?php 
  include('functions.php');
  $cached_html = getPageCaching();
  
  //if page is cached, render the cached html
  if($cached_html){
    echo $cached_html;
    die;
  }
  //if page is not cached
  ob_start();

?>
<html>
<head>
<title>Caching Example</title>
</head>

<body>
<h2>Caching Example</h2>
<p>This is an example for page caching to improve website performance.</p>
Blah Blah Blah Blah Blah Blah Blah
</body> </html> 
<?php 
$content = ob_get_contents();
setPageCaching($content);
?>

For complete guidance, follow this video:

Leave a Reply