Webサイトの速さを図るにはさまざまな指標・ツールがあります。有名なものとしてはGoogleが検索順位の指標にしているCore Web Vitalとそれを測ってくれるLighthouseがあります。このツールは主にフロントエンドの改善に役立ちますね。
さて、サイトの速さを図る指標の1つにTTFB(Time To First Byte)という概念があります。いまはあまりこの言葉自体は使われなくなったようですが、ブラウザがHTMLを受け取り始めるまでの時間(ミリ秒)を意味します。このTTFBは200ミリ秒が推奨されており、300-500ミリ秒だと普通、それを超えると「遅い」となります。
Chrome開発者ツールでサーバー応答時間を確認できます。
このTTFBに影響するのはSSLネゴシエーションなどの通信関係の時間もありますが、サーバーで色々動作している時間も含まれるので、ここが遅いと一気に2秒とかになってしまいます。WordPressの場合でいえばPHPおよびMySQLの処理時間が多くを占めるでしょう。
2秒とかはまずいので、これをせめて600ミリ秒以下にしたい、となったとします。が、問題はこれにどうやって気づくか、という点です。「自分で見ていて遅いと気づいた」というのはラッキーなレアケース、「お客さんが気づいて報告してきた」というのは怒られるかもしれませんが気づいたのでまだ良い方です。よくないのは遅いまま放置されててユーザーは離れていっているのだけど運営側は気づいていないというケースですね。
SELECT
page_path,
COUNT(*) AS hit_count,
ROUND(AVG(server_time_ms), 1) AS avg_server_time_ms,
SUM(server_time_ms) AS total_server_time_ms
FROM (
SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location") AS page_path,
SAFE_CAST((SELECT value.int_value FROM UNNEST(event_params) WHERE key = "value") AS INT64) AS server_time_ms
FROM
`【プロジェクトID】.analytics_【プロパティID】.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
AND event_name = 'wp_server_time'
)
WHERE server_time_ms IS NOT NULL
GROUP BY page_path
ORDER BY avg_server_time_ms DESC
LIMIT 10