¿Hay alguna diferencia apreciable, en términos de velocidad en un sitio web con poco tráfico, entre los siguientes fragmentos de código?
$html = file_get_contents('cache/foo.html'); if ($html) { echo $html; exit; }O esto:
$file = 'cache/foo.html'; if (file_exists($file)) { echo file_get_contents($file); exit; }En el primer fragmento, hay una sola llamada a file_get_contents() mientras que en el segundo también hay una llamada a file_exists(). La página implica el acceso a la base de datos, y este almacenamiento en caché lo evitaría por completo.
Será imperceptiblemente más lento en un sitio web con poco tráfico; pero no hay razón para realizar esa verificación de todos modos si va a obtener el contenido si existe, ya que file_get_contents() ya realiza esa verificación detrás de escena, devolviendo false si el archivo no existe.
Incluso puede llamar a file_get_contents() directamente dentro de la condición:
if ($html = file_get_contents('cache/foo.html')) { echo $html; exit; }Las diferencias de tiempo de ejecución son tan mínimas para ambas variantes que en la práctica no importa. La primera variante es un poco más rápida si el archivo existe. La segunda variante es más rápida si el archivo no existe. Ambas soluciones no tienen el mejor rendimiento porque todo el HTML se carga primero en la memoria antes de que la salida se realice con eco. Mejor es:
$ok = @readfile ('cache/foo.html');Con readfile, el archivo se emite directamente o sin desvíos. El operador @ suprime la advertencia si el archivo no existe. $ok contiene el número de bytes de salida si la salida fue exitosa y false si el archivo no existe.