PHP-APC: Speed up your web applications!

As regular readers of this blog might know I have written quite some tools using the different API’s of search engines, and always found them quite useful. When I was implementing my sitewide search function, one of the things that bothered me that it was a bit slow. I knew that I had seen some caching implementations on the Yahoo PHP developer center, but I hadn’t bothered up till then to look at them a bit better.

Now I did, and I found the cacheAPC example to be very, very easy. It relies on the Alternative PHP Cache, an opcode cache PECL extension for PHP. I wrote two functions, which I then put in to all my pieces of code which I’ve published that use a lot of calls to the different API’s. The first is curlopen, the function I use to open connections:

[code]function curlopen($request) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $request);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 100);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	$results = curl_exec ($ch);
	curl_close($ch);
	return $results;
}[/code]

The second one is the actual cache function, look at how easy it is:

[code]function request_cache($url, $ttl) {
	if(!$doc = apc_fetch($url)) {
		$doc = curlopen($url);
		if ($doc === false) return false;
		apc_store($url,$doc, $ttl);
	}
	return $doc;
}[/code]

It basically does three things:

  1. It looks if the requested resource is already in the cache, and if it is, it fetches that;
  2. If it’s not, it opens it through curlopen and stores it in the cache;
  3. It returns the requested data;

As you can see the request_cache function takes two parameters: the request url and the TTL, which, in seconds, determines how long that resource should be cached. Now if you request a PageRank for a URL, it’s fairly safe to set this to 24 hours, and you can see how much requests this saves!

Coming up next!


15 Responses to PHP-APC: Speed up your web applications!