2013-04-10 18 views
6

Sto costruendo un sito Web a scorrimento parallasse (non siamo tutti) che, tra le altre cose, rivela un'immagine mentre l'utente scorre.Tempi di decodifica immagine dallo strumento dev Timeline di Chrome

Ho eseguito la "rivelazione" posizionando l'immagine sullo sfondo e posizionando un div solido pieno sopra. Animare quindi questo div da 100% di altezza a 0% di altezza in base alla posizione di scorrimento, rivelando così l'immagine di sfondo.

Sto facendo questo genere di cose più volte e sfortunatamente sto rallentando.

Utilizzando la funzione Timeline integrata di Chrome, posso vedere che la maggior parte di questo rallentamento deriva da Decodifica immagine. Per quanto sopra rivela, sta decodificando l'immagine ogni fotogramma, che richiede 22ms per immagine per fotogramma.

Qualcuno sa quando il browser deve eseguire la decodifica dell'immagine e quando non lo fa? Mi sembra evidente che sarebbe necessario se ridimensionassi l'immagine, ma non che ne avrebbe bisogno quando coprirò a metà l'immagine?

Grazie per il vostro aiuto.

risposta

1

Come si anima la proprietà? Penso che potresti avere molte alternative alla semplice animazione dell'altezza (che è una sorta di ridimensionamento del contenitore).

Forse è meno intensivo limitarsi a "ritagliare" l'immagine di sfondo con un altro elemento. Ho trovato una discussione su StackOverflow con alcuni suggerimenti. Se si animano con javascript, purtroppo elementi pseudo sono nessuna opzione ...

Clip/Crop background-image with CSS

+0

Ciao Nirazul, I anima l'altezza del div di copertura con javascript. Vedrò se il metodo della clip funziona in modo diverso e ti faccio sapere. –

+0

Mille grazie, Nirazul, ho scoperto che usare il clipping per nascondere le immagini è un modo molto più efficiente del display: nessuna, o spostare l'immagine dallo schermo o spostare l'immagine principalmente dallo schermo - da quando sto facendo questo molto meno Image Decodifica che viene attivato in Chrome. Tuttavia, non ho contrassegnato questa domanda come risposta come la vera domanda SO era: "Qualcuno sa quando il browser deve fare la decodifica dell'immagine e quando non lo fa?" ma la tua risposta è stata molto utile, quindi grazie. –

3

Ho lottato con questo problema molto anche. Finora non ho trovato nulla di concreto e la mia soluzione proposta non sembra funzionare in tutti i casi e non sono stato in grado di accertarne il motivo.

Comunque ...

sembra che quando si anima un elemento solido sopra la parte superiore di un'immagine, cromo forza un recode dell'immagine.

Ci sono due cose che ho provato e per la maggior parte hanno avuto successo.

  1. Se si aggiunge -webkit-transform : translate3d(0,0,0) per l'elemento di copertura, si dovrebbe trovare la maggior parte, se non tutta l'immagine decodifica scomparire.

  2. Se aggiungere il CSS precedente all'elemento di copertura non è di aiuto, provare ad aggiungerlo all'immagine, oppure provare ad aggiungerlo a entrambi gli elementi.

mia comprensione è che usando la proprietà CSS 3d che spinge l'immagine in un proprio livello composito che viene memorizzato nella cache e gestita dalla GPU, piuttosto che il renderer software browser.

90% del tempo in cui ho trovato una delle suddette combinazioni riuscita. Spero possa essere d'aiuto.

+0

Ciao Gordyr, grazie per la risposta. Ricordo di aver provato le trasformazioni del webkit per ottenere la pressione della GPU, ma non penso che questo abbia risolto i miei problemi alla fine - potrebbe essere stato perché il tempo di inizializzazione stava causando ulteriori grattacapi, ma ad essere onesti, posso Ricordo bene perché non ha funzionato. Alla fine ho funzionato abbastanza bene usando vari metodi diversi per oggetti diversi. Qui è in azione: http://www.patentise.com/ –

+0

Felice di averlo capito :-) Sembra e funziona benissimo a proposito. – gordyr

Problemi correlati