如何编写最佳性能的文件检查代码



以下代码片段在低流量网站上的速度有明显差异吗?

$html = file_get_contents('cache/foo.html');
if ($html) {
echo $html;
exit;
}

或:

$file = 'cache/foo.html';
if (file_exists($file)) {
echo file_get_contents($file);
exit;
}

在第一个代码片段中,有一个对file_get_contents()的调用,而在第二个代码片段中也有一个对file_exists()的调用。这个页面确实涉及到数据库访问——而这个缓存可以完全避免这种情况。

在低流量的网站上,它会明显变慢;但是,如果文件存在,那么无论如何也没有理由执行该检查,因为file_get_contents()已经在幕后执行了该检查,如果文件不存在,则返回false

您甚至可以将对file_get_contents()的调用直接放在条件中:


if ($html = file_get_contents('cache/foo.html')) {
echo $html;
exit;
}

运行时差异最小的变异,它在实践中并不重要。如果文件存在,第一种变体会稍微快一些。如果文件不存在,第二个变体会更快。这两种解决方案并非都具有最佳性能,因为在echo完成输出之前,整个HTML首先被加载到内存中。更好的是:

$ok = @readfile ('cache/foo.html');

使用readfile直接输出文件或不绕路。如果文件不存在,@操作符将取消警告。如果输出成功,$ok包含输出的字节数,如果文件不存在,则为false。

最新更新