2016-01-13 14 views
5

Sto scrivendo un'applicazione Web che utilizza websocket per la comunicazione bidirezionale tra il client e il server. La mia preoccupazione principale è la latenza percepita dall'utente, quindi, sto misurando e profilando tutto ciò che posso. In particolare, sto catturando l'ora corrente nell'evento onmessage(). Questo è utile, ma voglio anche sapere quando l'evento è stato inserito nel ciclo degli eventi del browser, cosa che avviene prima che venga attivato l'evento onmessage.Temporizzazione Websocket: come ottenere l'ora esatta in cui un messaggio Websocket arriva al browser?

In Chrome Developer Tools, vedo le volte nella scheda "Rete-> Cornici", che, penso, è l'ora in cui l'evento entra nel ciclo degli eventi. Ma ho bisogno di catturare questo a livello di codice in Javascript. Qualche idea su come fare questo?

Ho fatto un po 'di "console.log" e ho visto in alcuni casi una differenza di circa 10 millisecondi tra il tempo visualizzato in Strumenti di sviluppo e il tempo che ho acquisito nell'evento onmessage. Voglio che le mie misurazioni mostrino se la differenza è sempre piccola come 10 millisecondi, o se a volte la differenza è molto più alta, a causa del rendering o di qualche altra cosa che accade nella pagina.

enter image description here

+0

In questo momento si sta verificando un problema con l'utilizzo della latenza percepita o semplicemente l'ottimizzazione prematura? Se stai riscontrando un problema, stai effettivamente inviando ping da 30k al secondo? Quel tipo di ping potrebbe portare a un sito come healthcare.gov ... Infine, la maggior parte degli umani non percepirà una differenza di 10 ms, quindi se sei in grado di catturare un tempo in codice che si distanzia di 10ms da quello che sei vedendo in dev. gli strumenti, questo è abbastanza buono, passare al prossimo problema. –

+0

La latenza è la mia principale preoccupazione, in realtà si sta verificando e sono alla ricerca di modi per ridurlo, quindi sto studiando l'influenza di diversi parametri sulla latenza, come dimensioni del messaggio, ubicazioni fisiche, numero di utenti simultanei, ecc. .. Il motivo per cui ho postato questa domanda è perché non sono sicuro che le mie misurazioni siano solo 10 millisecondi. Il browser sembra sapere quando è arrivato un messaggio, quindi penso che potrebbe esserci un modo per acquisire queste informazioni. E per quanto riguarda il 30k, questo è solo uno dei miei molti esperimenti. Non è necessariamente una tipica dimensione del messaggio. –

risposta

1

le API del browser per websocket è troppo ristretta per esporre le informazioni che si desidera.

browser ha iniziato ad esporre le informazioni di temporizzazione con il Performance interface, ma che si interfacciano vi dirà solo a voi le informazioni di temporizzazione del collegamento iniziale al server websocket, che non conoscono websocket incornicia

+0

Ok. Grazie per la condivisione. –

0

Sulla base della sua descrizione del problema, non è necessario. Il ritardo tra il momento in cui lo stack HTTP riceve il messaggio e quando lo inoltra nell'applicazione in modo che possa essere registrato a livello di codice è trascurabile e quasi certamente inferiore alla precisione del valore datetime javascript (è possibile utilizzare performance.now, ma ho i miei dubbi quanto sia preciso in realtà).

La tua latenza sarà determinata dai fattori di rete e dal tempo di risposta del server: se riesci a ottenere misurazioni ragionevoli, sarai dove vorresti essere. Gli altri fattori possono contribuire alla misurazione del "rumore": a patto che sia inferiore al 10% del valore che si sta tentando di misurare, non ci sono problemi.