В head это:
let a = Date.now()
//браузер полностью загрузил HTML, было построено DOM-дерево, но внешние ресурсы, такие как картинки <img> и стили, могут быть ещё не загружены.
document.addEventListener('DOMContentLoaded', () => {
let s = Date.now() - a
//send 's' to server
})
//браузер загрузил HTML и внешние ресурсы (картинки, стили и т.д.).
document.addEventListener('load', () => {
let s = Date.now() - a
//send 's' to server
})
Можно хоть на каждый скрипт или картинку 'load' повесить и чекать
P.S. в chrome devtools -> network время загрузки каждого компонента отображается