Cosa sono i listener di eventi passivi?


Risposte:


213

I listener di eventi passivi sono uno standard web emergente, una nuova funzionalità fornita in Chrome 51 che fornisce un potenziale potenziamento alle prestazioni di scorrimento. Note di rilascio di Chrome.

Consente agli sviluppatori di opt-in per migliorare le prestazioni di scorrimento eliminando la necessità di scorrere per bloccare i listener di eventi touch e wheel.

Problema: tutti i browser moderni hanno una funzionalità di scorrimento con thread per consentire lo scorrimento senza intoppi anche quando è in esecuzione JavaScript costoso, ma questa ottimizzazione è parzialmente sconfitta dalla necessità di attendere i risultati di qualsiasi touchstarte dei touchmovegestori, che possono impedire lo scorrimento chiamando preventDefault()sull'evento.

Soluzione: {passive: true}

Contrassegnando un tocco o un listener delle ruote come passivo, lo sviluppatore promette che il gestore non chiamerà preventDefaultper disabilitare lo scorrimento. This frees the browser up to respond to scrolling immediately without waiting for JavaScript, thus ensuring a reliably smooth scrolling experience for the user.

document.addEventListener("touchstart", function(e) {
    console.log(e.defaultPrevented);  // will be false
    e.preventDefault();   // does nothing since the listener is passive
    console.log(e.defaultPrevented);  // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);

DOM Spec , Demo Video , Explainer Doc


1
quindi dovremmo sempre aggiungere queste righe di codice (almeno per la maggior parte dei casi), giusto?
Altiano Gerung,

Questo si blocca il tuo motore js in Mozilla. È meglio rilevare il browser prima di allegare questo listener di eventi
yardpenalty.com

@AltianoGerung Quando il browser lo consiglia. Vedrai il messaggio nella scheda Informazioni o Avviso della console.
snowYetis,

@ yardpenalty.com Possiamo usare il seguente polyfill ed evitare i controlli del browser. Per lo scorrimento dei casi d'uso, l'utilizzo di listener di eventi passivi è un grande vantaggio. github.com/WICG/EventListenerOptions/blob/gh-pages/…
Vikrant Siwach

@Vikrant Siwach ottimo consiglio. Polyfill è veloce e in qualche modo indolore quando li gestisci tutti, diciamo polyfill.js
yardpenalty.com
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.