Wydajność ruchomego obrazu na stronie internetowej za pomocą CSS vs HTML5 Canvas
Mam obrazek i przesuwam go po mojej stronie (JavaScript) w ten sposób:
satelliteImage.style.top = coordinates.top + "px";
satelliteImage.style.left = coordinates.left + "px";
Niestety, wydajność jest dość zła we wszystkich przeglądarkach z wyjątkiem Chrome. Wąskim gardłem jest szybkość renderowania. Nie mam nadziei dla IE, ale chcę przynajmniej ulepszyć Firefoksa. Czy ktoś ma doświadczenie z wydajnością HTML5 Canvas podczas przenoszenia obrazu, w porównaniu do zmiany stylu?
5 answers
Stworzyłem równoważne testy do porównania liczby klatek na obrazek za pomocą CSS z rysowaniem go na płótnie HTML. Oto testy:
- przenoszenie obrazu przez płótno
- przenoszenie obrazu za pomocą CSS
- przenoszenie 20 spritów przez płótno na tle 1024x768
- przenoszenie 20 spritów za pomocą CSS na tle 1024x768
A oto wyniki FPS (Zobacz URL do testu szczegóły):
Image Image Sprite Sprite Browser Canvas CSS Canvas CSS ---------------------------------------------- Safari v5.0.3 59 95 59 89 Firefox v3.6.13 59 95 60 90 Firefox v4.0b8 75 89 78 82 Chrome v8.0 108 230 120 204 iPad, Horiz 17 44 2 14 iPad, Vert 4 75 2 15
Jak widać:
- zawsze uzyskasz lepsze wyniki przesuwania obrazu jako elementu HTML niż przerysowywania części płótna i
- jesteś
prawdopodobnieprawdopodobnie robi coś złego, jeśli dostajesz tylko 5fps.
Edit : Dodano testy do przenoszenia 20 małych animowanych sprite ' ów na tle. Wnioski pozostają takie same.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 19:40:34
Minęło już ponad 2 lata i postanowiłem przeprowadzić te testy, aby sprawdzić, czy to nadal prawda. Tak...i nie ma.
Firefox Desktop i mobile uruchamiają animacje CSS znacznie szybciej niż canvas.
-
Chrome desktop uruchamia animacje canvas i CSS o tym samym
Chrome Mobile (na Nexusie 7) robi dokładnie odwrotnie: canvas działa znacznie szybciej niż CSS!
(Używanie Firefoksa Android z Nexusem 7 i przeglądarek desktopowych na Linuksie O Rozdzielczości 1920x1080)
Browser/OS Canvas Image CSS IMage Canvas Sprites CSS Sprites ----------- ------------ ---------- -------------- ----------- Firefox 16 56.7fps 215.6 fps 59.2fps 203.6fps Firefox 16 Android 17.1 fps 179.6fps 11.5fps 35.7 Chrome 22 192.3fps 223.5fps 170.1fps 164.3fps Chrome Android 48.3fps 39.9fps 92.8fps 13.1fpsCo inni dostają? Czy ktoś może na to przetestować IE9, 10?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-12 22:49:02
Pomyślałem, że zaktualizuję to stare pytanie o moje ustalenia na iPadzie 3 generacji:
Canvas wygrywa 2: 1 z animacjami sprite ' ów średnio około 120 fps z czyszczeniem tła przełączanym w obie strony. CSS ledwo mógł osiągnąć 60 fps.
Jeśli chodzi o pojedynczy obraz, CSS był zdecydowanie szybszy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-28 15:39:05
Z mojego doświadczenia z Canvas powinieneś być w stanie uzyskać dobre 50 fps na Firefoksie, a nawet dobre 15 fps na iOS. IE9 będzie prawdopodobnie najszybszą przeglądarką, inne wersje tak naprawdę nie implementują Canvas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 12:37:00
[[2]] w związku z ustaleniami MyNameIsKo na temat wydajności iPada 3. Zastanawiałem się, czy ma to związek z faktem, że metoda CSS DOM musiała martwić się o rysowanie na ekranie retina iPada 3, podczas gdy płótno byłoby rysowane w niższej rozdzielczości, a następnie blt ' D na ekranie. IPad 1 jest znacznie szybszy dla aktualizacji CSS niż ipad3!
Wprowadziłem również pewne zmiany w JavaScript canvas, aby móc rysować na płótnie rozdzielczości siatkówki. Dodałem następujący kod po canv.wysokość = h; W bg.funkcja onload:
if (window.devicePixelRatio) {
ctx.canvas.style.width = w + "px";
ctx.canvas.style.height = h + "px";
ctx.canvas.height = h * window.devicePixelRatio;
ctx.canvas.width = w * window.devicePixelRatio;
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
}
Co znacznie zmniejszyło wydajność...
IPad 1 (iOS 5.5.1)
IPad 3 (iOS 6.1.3)
CSS Sprite Canvas Sprites
-----------------------------------------------------
iPad 1 90 100
iPad 3 55 120
iPad 1(canvas changes) n/a 100
iPad 3(canvas changes) n/a 35
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 08:26:34