在网页中调用PHP动态生成的二维码非常影响网页的加载速度,考虑到二维码是每天更新,所以准备在生成二维码的PHP程序中加入缓存机制
这次使用的缓存插件是doctrine/cache,使用的缓存核心为APC。
增加的缓存部分代码如下,使用方法参见官方手册
1 2 3 4 5 6 7 8 9 |
// set cache $cacheDriver = new \Doctrine\Common\Cache\ApcCache(); if ($cacheDriver->contains($barcode_link)) { $ss_img = $cacheDriver->fetch($barcode_link); } else { // fetch img content $ss_img = file_get_contents($barcode_link); $cacheDriver->save($barcode_link, $ss_img, 86400); } |
分析
缓存机制的核心在于选对cache_id,即如何用一个唯一的ID来描述所要缓存的内容
之前尝试用生成二维码的text内容来描述缓存内容,后来发现由于针对Retina做了优化,导致虽然二维码内容相同,但是输出的二维码图片大小不同。
如果单单使用text内容作为cache_id,那么调用Retina图片的时候依然会显示非Retina缓存图片。
最后发现可以用URL作为cache_id,这样就可以解决这个问题。
There are no comments yet