На бэке рассчитать вес каждого подключаемого ресурса в gz, передать в data-атрибут (хоть в байтах, хоть в процентах); на фронте обойти все эти ресурсы, рассчитывая общий вес, затем вешать слушателя на onload каждого из них и считать. Переменную можно использовать глобальную, window['awesomeCounter']
Для оптимизации использовать кэш + прописать атрибут заранее, если ресурсы статические