Dove dovrebbe essere effettuato il debouncing dell'evento, nell'emettitore o nel consumatore?

4

Dove ha più senso rimandare gli eventi? Considerare l'evento di ridimensionamento di un browser Internet. Il browser può generare una miriade di eventi di ridimensionamento mentre un utente fa clic e trascina per ridimensionare una finestra del browser. Tuttavia, in genere, si finisce con il debouncing della gestione del callback del listener di eventi resize perché di solito si preoccupa solo dell'inizio o della fine di un'azione di ridimensionamento.

Se avessi qualche funzionalità che avrebbe sparato eventi in modo simile, a raffica, avrebbe senso rimbalzare il mio evento dal mio emettitore o ha più senso inviare tutti gli eventi, non importa quanti, e lasciare che gli stessi consumatori si occupino del debouncing?

Considererei il vantaggio del debouncing dalla sorgente di non dover disporre di più debouncer che disseminano il codice ovunque, in modo da consumare i propri eventi, riducendo così la duplicazione del codice. Tuttavia, vedo che il vantaggio del debouncing a livello di ascoltatore è che ottieni una risoluzione molto più alta degli eventi di origine nel caso in cui ne hai bisogno e ottieni un maggiore controllo sul tweaking del ritardo nel debounce per listener.

    
posta zero298 09.05.2017 - 14:50
fonte

2 risposte

6

Direi che il consumatore dovrebbe prendersene cura. In questo modo l'emettitore non ha bisogno di formulare alcuna ipotesi su come il consumatore vuole gestire l'evento. Forse in un contesto molto definito, in cui l'emettitore e il consumatore sono controllati da te, puoi farlo viceversa. Ma anche in quel caso starei con l'opzione che implica meno ipotesi sulle esigenze del consumatore.

    
risposta data 09.05.2017 - 15:54
fonte
1

In un sistema con "canali" di prima classe o "flussi di eventi", il debouncing è un problema separabile per es. in Estensioni reattive . In questo contesto, il codice che dovrebbe essere fatto dovrebbe essere il codice che collega il consumatore e il produttore, né loro stessi a preoccuparsi del debouncing.

Se questa non è un'opzione allora devi fare una scelta. Zalomon ha perfettamente ragione sul fatto che l'opzione più flessibile ea prova di futuro è che il consumatore faccia il debouncing. Tuttavia, questo comporta il costo di duplicare il codice e il lavoro duplicato oltre al carico mentale di dover ricordare di farlo se è un requisito comune o addirittura onnipresente. Se è molto improbabile che qualcuno voglia il flusso di eventi "grezzo" e / o che ci siano conseguenze significative sulle prestazioni un gruppo di eventi che alla fine vengono ignorati, potrebbe essere molto più sensato fare il debouncing al produttore di eventi. / p>     

risposta data 10.05.2017 - 01:04
fonte

Leggi altre domande sui tag