¿Qué es el TTFB?
El TTFB es una métrica que mide el tiempo entre la solicitud de un recurso y el momento en que comienza a llegar el primer byte de una respuesta.
startTime
y responseStart
.
El TTFB es la suma de las siguientes fases de solicitud:
- Tiempo de redireccionamiento
- Tiempo de inicio del service worker (si corresponde)
- búsqueda de DNS
- Negociación de conexión y TLS
- Solicitud, hasta el punto en el que llegó el primer byte de la respuesta
Reducir la latencia en el tiempo de configuración de la conexión y en el backend puede disminuir el TTFB.
TTFB y sugerencias iniciales
La introducción de los 103 indicadores anticipados genera cierta confusión sobre qué mide el TTFB del "primer byte". Las 103 sugerencias anticipadas se cuentan como los "primeros bytes". finalResponseHeadersStart
es una entrada de tiempo adicional a responseStart
que mide el inicio de la respuesta final del documento (por lo general, una respuesta HTTP 200) que se medirá.
Las sugerencias anticipadas son solo un ejemplo más reciente de la respuesta anticipada. Algunos servidores permiten que se borre de forma anticipada la respuesta del documento antes de que el cuerpo principal esté disponible, ya sea solo con los encabezados HTTP o con el elemento <head>
, que podrían considerarse similares en efecto a los indicadores anticipados. Esta es otra razón por la que todo esto se mide como reponseStart
y, por lo tanto, como TTFB.
Enviar datos con anticipación tiene un valor real si la respuesta completa llevará un poco más de tiempo. Sin embargo, esto dificulta la comparación del TTFB entre diferentes plataformas o tecnologías según las funciones que usen y cómo eso afecte la medición del TTFB que se utiliza. Lo más importante es comprender qué mide la herramienta que usas y cómo se ve afectada por la plataforma que se mide.
¿Cuál es una buena puntuación de TTFB?
Debido a que el TTFB precede a las métricas centradas en el usuario, como el primer procesamiento de imagen con contenido (FCP) y el procesamiento de imagen con contenido más grande (LCP), se recomienda que tu servidor responda a las solicitudes de navegación con la suficiente rapidez para que el percentil 75 de los usuarios experimente un FCP dentro del umbral "bueno". Como guía aproximada, la mayoría de los sitios deben esforzarse por tener un TTFB de 0.8 segundos o menos.
Cómo medir el TTFB
El TTFB se puede medir en el laboratorio o en el campo de las siguientes maneras.
Herramientas de campo
Herramientas de lab
- En el panel de red de las herramientas para desarrolladores de Chrome
- WebPageTest
Mide el TTFB en JavaScript
Puedes medir el TTFB de las solicitudes de navegación en el navegador con la API de Navigation Timing. En el siguiente ejemplo, se muestra cómo crear un PerformanceObserver
que detecte una entrada navigation
y la registre en la consola:
new PerformanceObserver((entryList) => {
const [pageNav] = entryList.getEntriesByType('navigation');
console.log(`TTFB: ${pageNav.responseStart}`);
}).observe({
type: 'navigation',
buffered: true
});
La biblioteca de JavaScript web-vitals
también puede medir el TTFB en el navegador de forma más concisa:
import {onTTFB} from 'web-vitals';
// Measure and log TTFB as soon as it's available.
onTTFB(console.log);
Mide las solicitudes de recursos
El TTFB se aplica a todas las solicitudes, no solo a las de navegación. En particular, los recursos alojados en servidores de origen cruzado pueden generar latencia debido a la necesidad de configurar conexiones a esos servidores. Para medir el TTFB de los recursos en el campo, usa la API de Resource Timing dentro de un PerformanceObserver
:
new PerformanceObserver((entryList) => {
const entries = entryList.getEntries();
for (const entry of entries) {
// Some resources may have a responseStart value of 0, due
// to the resource being cached, or a cross-origin resource
// being served without a Timing-Allow-Origin header set.
if (entry.responseStart > 0) {
console.log(`TTFB: ${entry.responseStart}`, entry.name);
}
}
}).observe({
type: 'resource',
buffered: true
});
El fragmento de código anterior es similar al que se usa para medir el TTFB de una solicitud de navegación, excepto que, en lugar de consultar entradas de 'navigation'
, consultas entradas de 'resource'
. También se considera el hecho de que algunos recursos cargados desde el origen principal pueden mostrar un valor de 0
, ya que la conexión ya está abierta o un recurso se recupera instantáneamente desde una caché.
Cómo mejorar el TTFB
Si deseas obtener orientación para mejorar el TTFB de tu sitio, consulta nuestra guía detallada para optimizar el TTFB.