Простой способ узнать Time To First Byte (TTFB) используя cURL

Немного Википедии (хоть и переведенной на русский)

Time To First Byte («Время до первого байта, TTFB) — это измерение, используемое как указание на отзывчивость веб-сервера или другого сетевого ресурса.

TTFB измеряет продолжительность от пользователя или клиента, делающего HTTP-запрос к первому байту страницы, получаемой браузером клиента. Это время составлено из времени соединения сокета, времени, затраченного на отправку HTTP-запроса, и времени, затраченного на получение первого байта страницы. Хотя иногда неправильно понимается как вычисление после DNS, исходный расчет TTFB в сети всегда включает задержку сети в измерении времени, которое требуется для начала загрузки ресурса.

Часто меньший (более быстрый) размер TTFB рассматривается как ориентир хорошо настроенного серверного приложения. Например, более низкое время до первого байта может указывать на меньшее количество динамических вычислений, выполняемых веб-сервером, хотя это часто происходит из-за кэширования на уровне DNS, сервера или приложения. Чаще всего наблюдается очень низкий TTFB со статически обслуживаемыми веб-страницами, в то время как более крупный TTFB часто встречается с большими, динамическими запросами данных, извлекаемыми из базы данных.

Узнать TTFB (в секундах), используя cURL, можно следующим образом:

curl -q -o /dev/null -w "\nConnect: %{time_connect}\nTTFB: %{time_starttransfer}\nTotal time: %{time_total} \n" https://google.com

Что выведет приблизительно следующее:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14053    0 14053    0     0  14053      0 --:--:-- --:--:-- --:--:--  201k
Connect: 0,008494
TTFB: 0,067665
Total time: 0,068982

Вообще, у вывода curl --write-out ещё много разных полезных переменных, что можете узнать из страницы руководства curl

man curl

Вот пример со всеми включенными опциями вывода:

curl -q -o /dev/null -w "\n\
content_type: %{content_type}\n\
filename_effective: %{filename_effective}\n\
ftp_entry_path: %{ftp_entry_path}\n\
http_code: %{http_code}\n\
http_connect: %{http_connect}\n\
http_version: %{http_version}\n\
local_ip: %{local_ip}\n\
local_port: %{local_port}\n\
num_connects: %{num_connects}\n\
num_redirects: %{num_redirects}\n\
proxy_ssl_verify_result: %{proxy_ssl_verify_result}\n\
redirect_url: %{redirect_url}\n\
remote_ip: %{remote_ip}\n\
remote_port: %{remote_port}\n\
scheme: %{scheme}\n\
size_download: %{size_download}\n\
size_header: %{size_header}\n\
size_request: %{size_request}\n\
size_upload: %{size_upload}\n\
speed_download: %{speed_download}\n\
speed_upload: %{speed_upload}\n\
ssl_verify_result: %{ssl_verify_result}\n\
time_appconnect: %{time_appconnect}\n\
time_connect: %{time_connect}\n\
time_namelookup: %{time_namelookup}\n\
time_pretransfer: %{time_pretransfer}\n\
time_redirect: %{time_redirect}\n\
time_starttransfer: %{time_total}\n\
time_total: %{time_total}\n\
url_effective: %{url_effective}\n\
\n" https://google.com

Что выведет приблизительно следующее:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14053    0 14053    0     0  14053      0 --:--:-- --:--:-- --:--:--  178k
content_type: text/html; charset=UTF-8
filename_effective: /dev/null
ftp_entry_path:
http_code: 200
http_connect: 000
http_version: 1.1
local_ip: 192.168.1.127
local_port: 44252
num_connects: 1
num_redirects: 0
proxy_ssl_verify_result: 0
redirect_url:
remote_ip: 104.27.184.108
remote_port: 443
scheme: HTTPS
size_download: 14053
size_header: 902
size_request: 81
size_upload: 0
speed_download: 14053,000
speed_upload: 0,000
ssl_verify_result: 0
time_appconnect: 0,028215
time_connect: 0,009203
time_namelookup: 0,007735
time_pretransfer: 0,028261
time_redirect: 0,000000
time_starttransfer: 0,078008
time_total: 0,078008
url_effective: https://google.com/