如何编写高性能文件校验代码?两种PHP缓存读取写法性能差异对比
低流量场景下两段代码的性能差异结论
低流量网站场景下,两段代码的性能没有任何可感知的差异,甚至绝大多数普通流量的站点也感知不到两者的区别。
具体原因分析
- 单次
file_exists调用的开销极低,哪怕是走磁盘IO也只有微秒级,加上现代操作系统普遍自带文件系统缓存,只要缓存文件不是首次访问的冷数据,两次函数调用的开销加起来都不到1毫秒,和你跳过的数据库查询(普遍是几十到几百毫秒级别)的开销比起来,完全可以忽略不计。 - 真要抠逻辑严谨性,第二段代码反而更稳妥:第一段代码的判断逻辑有漏洞,如果缓存文件存在但内容为空、或者内容是
0这类会被PHP判定为假值的字符串,if ($html)会判定为不成立,直接跳过缓存走数据库查询,反而会导致不必要的性能损耗,还可能出现业务逻辑问题。 - 要是实在想进一步压缩这点无关紧要的开销,你也可以用
readfile替代file_get_contents+echo的写法,直接输出文件内容到标准输出,还能省掉把文件内容加载到内存再输出的步骤:
$file = 'cache/foo.html'; if (file_exists($file)) { readfile($file); exit; }
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

