const uptime = new Date().getTime() - performance.timeOrigin;
Czemu nie użyłeś tutaj performance.now() zamiast Date?
Jest to zgodne z intuicją. O ile w przypadku Web Socketów istnieje jakiś serwer do utrzymywania (czy nawet WebRCT do samego nawiązywania) połączenia, to tutaj jedyną warstwą transportu danych jest pamięć operacyjna komputera na którym używany jest Broadcast Channel.
To brzmi dziwnie. Raczej bym po prostu napisał, że zajmuje się tym po prostu przeglądarka.
NIemniej całość artykułu bardzo spoko. Chociaż mam wrażenie, że trochę tam za dużo wszystkiego: parcel, TS, canvas… Tak trochę Broadcast Channel przestał być głównym bohaterem.