PRIMERJAVA DOMORODNIH ANIMACIJ CSS3 IN ANIMACIJ Z …
Transcript of PRIMERJAVA DOMORODNIH ANIMACIJ CSS3 IN ANIMACIJ Z …
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Rok Penšek
PRIMERJAVA DOMORODNIH ANIMACIJ CSS3 IN ANIMACIJ Z UPORABO JAVASCRIPTA
Diplomsko delo
Maribor, september 2016
PRIMERJAVA DOMORODNIH ANIMACIJ CSS3
IN ANIMACIJ Z UPORABO JAVASCRIPTA
Diplomsko delo
Študent: Rok Penšek
Študijski program: visokošolski strokovni študijski program
Informatika in tehnologije komuniciranja
Smer: -
Mentor: red. prof. dr. Vili Podgorelec
Somentor: asist. Sašo Karakatič
Lektor: Žiga Oset, mag.
III
ZAHVALA
Rad bi se zahvalil svojim staršem,
ki so mi omogočili študij in mi vedno stali ob strani.
IV
Primerjava domorodnih animacij CSS3 in
animacij z uporabo JavaScripta
Ključne besede: spletne animacije, JavaScript, css3, html, primerjalna analiza, razvoj
programske opreme
UDK: 004.774-026.12(043.2)
Povzetek
V diplomskem delu na podlagi izdelanih testov s tehnologijami CSS3, JavaScript in jQuery
opisujemo in podrobno analiziramo zmogljivost in odzivnost spletnih animacij ter pokritost
tehnologij med najbolj uporabljenimi mobilnimi brskalniki. V prvem poglavju so
predstavljene tehnologije, v naslednjih poglavjih pa izdelava testov in načini testiranja. V
končnem poglavju so podani rezultati testiranj.
V
Comparison between native CSS3 animations
and JavaScript animations
Keywords: web animations, JavaScript, css3, html, benchmark analysis, software
development
UDK: 004.774-026.12(043.2)
Abstract
In the thesis, we describe and analyse performance of the built web animations using
either CSS3, JavaScript or jQuery technology as well as their compatibility between
today's most used mobile browsers. The first section briefly presents used technologies.
In the chapters, which follow, we describe how the tests and ways we used to benchmark
performance were made. At the end, we present benchmark results.
VI
KAZALO
1 UVOD ............................................................................................................... 1
1.1 Metode diplomskega dela .................................................................................................... 2
2 SPLETNE ANIMACIJE .................................................................................... 3
2.1 Kaj so spletne animacije ...................................................................................................... 3
2.2 Zgodovina razvoja spletnih animacij .................................................................................. 4
2.2.1 GIF .................................................................................................................................. 4
2.2.2 Adobe Flash in Shockwave ............................................................................................ 5
2.2.3 Java ................................................................................................................................ 6
2.3 Analiza obstoječih tehnologij za dosego animacij na spletu ........................................... 7
2.3.1 CSS3 .............................................................................................................................. 7
2.3.2 JavaScript ....................................................................................................................... 8
3 OPIS UPORABLJENIH TEHNOLOGIJ ......................................................... 10
3.1 HTML5 .................................................................................................................................. 10
3.2 Javascript ............................................................................................................................ 12
3.3 jQuery + UI ........................................................................................................................... 12
3.4 CSS3 .................................................................................................................................... 12
4 IZDELAVA TESTNEGA OKOLJA ................................................................. 13
4.1 Orodje za zaznavo FPS ...................................................................................................... 14
4.2 Implementacija orodij za animiranje ................................................................................. 16
4.2.1 Implementacija z uporabo JavaScript-a ....................................................................... 17
4.2.2 Implementacija z uporabo jQuery + UI knjižice ............................................................ 20
4.2.3 Implementacija z uporabo CSS3 standarda ................................................................. 22
VII
5 REZULTATI ANALIZE .................................................................................. 26
5.1 Podpora s strani brskalnikov ............................................................................................ 27
5.2 Težavnost implementacije ................................................................................................. 28
5.3 Hitrost animacije................................................................................................................. 28
5.3.1 Chrome ......................................................................................................................... 29
5.3.2 Firefox ........................................................................................................................... 37
5.3.3 Vgrajeni brskalniki ........................................................................................................ 44
6 SKLEP ........................................................................................................... 52
7 VIRI IN LITERATURA ................................................................................... 53
VIII
KAZALO SLIK
SLIKA 2.1: FILMSKI TRAK ODBIJAJOČE SE ŽOGICE .................................................................................... 3
SLIKA 2.3: PRIKAZ TESTNE FLASH ANIMACIJE PREKO NAMENSKEGA VTIČNIKA ........................................... 4
SLIKA 2.4: PRIKAZ SHOCKWAVE TEHNOLOGIJE PREKO NAMENSKEGA VTIČNIKA ......................................... 6
SLIKA 2.5: PRIKAZ NALAGANJE JAVA APPLETA PREKO NAMENSKEGA VTIČNIKA .......................................... 7
SLIKA 2.6: PRIMER CSS3 KODE ............................................................................................................ 8
SLIKA 2.7: PRIMER JS KODE .................................................................................................................. 9
SLIKA 2.8: LOGOTIP WEBGL ............................................................................................................... 10
SLIKA 3.1: LOGOTIP HTML5 ............................................................................................................... 11
SLIKA 3.2: PRIMER JS KODE Z UPORABO JQUERY FUNKCIJ .................................................................... 12
SLIKA 4.1: TESTNO OKOLJE – ANIMACIJA ELEMENTOV PO X OSI S POMOČJO CSS3 IN JS ........................ 14
SLIKA 4.2: PRIKAZ REZULTATOV TESTIRANJA V TESTNEM OKOLJU .......................................................... 16
SLIKA 5.1: TESTIRANJE NA MOBILNIH NAPRAVAH ................................................................................... 27
KAZALO GRAFOV
GRAF 5.1: ANIMACIJA PO X OSI Z UPORABO CSS3 + JS V BRSKALNIKU CHROME ................................... 29
GRAF 5.2: ANIMACIJA PO X OSI Z UPORABO JS V BRSKALNIKU CHROME ................................................. 30
GRAF 5.3: ANIMACIJA PO X OSI Z UPORABO JQUERY V BRSKALNIKU CHROME ........................................ 31
GRAF 5.4: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO CSS3 + JS V BRSKALNIKU CHROME ............ 32
GRAF 5.5: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JS V BRSKALNIKU CHROME ......................... 33
GRAF 5.6: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JQUERY V BRSKALNIKU CHROME ................. 34
GRAF 5.7: SPREMEMBA BARVE ELEMENTOV Z UPORABO CSS3 + JS V BRSKALNIKU CHROME ................. 35
GRAF 5.8: SPREMEMBA BARVE ELEMENTOV Z UPORABO JS V BRSKALNIKU CHROME .............................. 36
GRAF 5.9: SPREMEMBA BARVE ELEMENTOV Z UPORABO JQUERY V BRSKALNIKU CHROME ...................... 37
GRAF 5.10: ANIMACIJA PO X OSI Z UPORABO CSS3 + JS V BRSKALNIKU FIREFOX .................................. 38
GRAF 5.11: ANIMACIJA PO X OSI Z UPORABO JS V BRSKALNIKU FIREFOX ............................................... 39
GRAF 5.12: ANIMACIJA PO X OSI Z UPORABO JQUERY V BRSKALNIKU FIREFOX ....................................... 40
GRAF 5.13: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JS V BRSKALNIKU FIREFOX ....................... 41
GRAF 5.14: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JQUERY V BRSKALNIKU FIREFOX ............... 42
GRAF 5.15: SPREMEMBA BARVE ELEMENTOV Z UPORABO JS V BRSKALNIKU FIREFOX ............................. 43
GRAF 5.16: SPREMEMBA BARVE ELEMENTOV Z UPORABO JQUERY V BRSKALNIKU FIREFOX..................... 44
IX
GRAF 5.17: ANIMACIJA PO X OSI Z UPORABO CSS3 + JS V VGRAJENEM BRSKALNIKU ............................. 45
GRAF 5.18: ANIMACIJA PO X OSI Z UPORABO JS V VGRAJENEM BRSKALNIKU .......................................... 46
GRAF 5.19: ANIMACIJA PO X OSI Z UPORABO JQUERY V VGRAJENEM BRSKALNIKU .................................. 47
GRAF 5.20: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO CSS3 + JS V VGRAJENEM BRSKALNIKU ..... 48
GRAF 5.21: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JS V VGRAJENEM BRSKALNIKU .................. 48
GRAF 5.22: SPREMEMBA VELIKOSTI ELEMENTOV Z UPORABO JQUERY V VGRAJENEM BRSKALNIKU .......... 49
GRAF 5.23: SPREMEMBA BARVE ELEMENTOV Z UPORABO CSS3 + JS V VGRAJENEM BRSKALNIKU .......... 50
GRAF 5.24: SPREMEMBA BARVE ELEMENTOV Z UPORABO JS V VGRAJENEM BRSKALNIKU ....................... 50
GRAF 5.25: SPREMEMBA BARVE ELEMENTOV Z UPORABO JQUERY V VGRAJENEM BRSKALNIKU ............... 51
X
SEZNAM UPORABLJENIH KRATIC
JS – JavaScript
PHP – PHP HyperText Preprocessor
HTML – HyperText Markup Language
CSS – Cascading Style Sheets
API – Application Programming Interface
DOM – Document Object Model
GIF – Graphics Interchange Format
UI – User Interface
FPS – Frames Per Second
RGB – Red Green Blue
ECMA – European Computer Manufacturer's Association
HiDPI – High Dots Per Inch
WebGL – Web Graphics Library
1
1 UVOD
V hitro rastoči dobi računalništva in informatike se vsak dan razvijajo nova orodja ter
standardi, ki nam programerjem omogočajo lažje, hitrejše predvsem pa nove načine
razvijanja rešitve za različne probleme. Splet pri tem nikakor ne zaostaja, kar dokazuje
tudi najnovejši HTML5 in CSS3 standard.
V diplomskem delu smo prikazali uporabo CSS3 animacij ter jih primerjali s starim
načinom animacije DOM elementov, za katerega je potrebna JavaScript in jQuery knjižica.
Namen diplomske naloge je prikazati številne poti, ki so na voljo za dosego navzven
identične animacije in tudi prednosti in slabosti pri vsaki izmed uporabljenih tehnologij.
Pri izdelavi testov smo se osredotočali predvsem na najbolj osnoven in optimalen način
animacije preprostih DOM elementov, ki je možen z tehnologijami, ki jih bomo testirali.
Primerjava je bila izvedena na večjem številu mobilnih naprav in tudi na osebnih
računalnikih na podlagi možnosti animacije posamične rešitve, kompatibilnosti z
brskalniki, hitrosti animacije ter težavnosti same implementacije.
Cilji diplomskega dela so:
raziskati postopek razvoja testne spletne strani z uporabo CSS3, JavaScript-a in
jQuery knjižice,
podrobno preučiti in analizirati delovanje vseh izmed naštetih tehnologij za
animacijo DOM elementov,
raziskati postopek uporabe orodja za razvijalce in razhroščevanje v brskalnikih na
mobilnih napravah in osebnih računalnikih.
Raziskovalna vprašanja diplomskega dela so:
ali je CSS3 standard učinkovitejši in hitrejši za dosego ciljev preproste animacije
DOM elementov od ostalih metod?
Ali je CSS3 standard dovolj dobro podprt s strani brskalnikov za današnjo rabo pri
izdelavi spletne rešitve?
2
1.1 Metode diplomskega dela
Pri raziskovanju smo uporabili opisno oz. deskriptivno metodo študije literature, dostopne
na spletu. Na podlagi te literature smo nato izdelali serijo številnih testov z uporabo CSS3,
JavaScript in jQuery tehnologije. Pomagali smo si tudi z že zaključenimi delčki kode ali
celotnimi knjižicami prosto dostopnimi na spletu, ki so nam olajšale odgovoriti na
raziskovalna vprašanja na podlagi točnejših performančnih meritev.
3
2 SPLETNE ANIMACIJE
2.1 Kaj so spletne animacije
Animacija je v osnovi iluzija gibanja, ki se doseže s hitrim prikazovanjem sličic, kjer je
vsaka malenkost drugačna od predhodne [1]. Če namesto fizičnih sličic animiramo
elemente (ali njihovo vsebino), ki se prikažejo v brskalniku, lahko rečemo, da se izvaja
spletna animacija.
Slika 2.1: Filmski trak odbijajoče se žogice
4
2.2 Zgodovina razvoja spletnih animacij
Kljub temu da so brskalniki začeli podpirati prve osnutke HTML značk že leta 1993,
začenši z brskalnikom Mosaic [2], pa so spletne animacije ugledale luč sveta šele leta
1996, ko je takrat popularni brskalnik Netscape z različico 2.0 pričel podpirati JavaScript in
animirane GIF sličice. Ob izidu HTML 3.2 različice leto kasneje je bilo možno vgraditi v
samo spletno stran Java applet, katerega je ločeno preko namenskega vtičnika poganjala
Java. Kasneje se je z izidom HTML 4.0 leta 1999 možnost uporabe različnih programskih
vtičnikov razširila [3] tudi na ostalo programsko opremo, kjer je največ slave požel Flash.
Slika 2.2: Prikaz testne Flash animacije preko namenskega vtičnika
2.2.1 GIF
GIF oz. Graphics Interchange Format je rastrski slikovni format, ki ima zmožnost prikazati
256 barv iz 24-bitnega barvnega modela RGB. Čeprav je kot format obstajal že leta 1987,
pa je možnost animacije bila dodana šele s specifikacijo GIF89a leta 1989. Od leta 1996,
5
ko ga je podprl prvi brskalnik NetScape pa vse do danes, ga še vedno videvamo na
spletnih straneh za prikaz kratkih animacij. Danes ga ponekod na spletu že izpodriva
format WebM. [4]
2.2.2 Adobe Flash in Shockwave
Čeprav podpora za oba vtičnika dandanes pada, sta bila na začetku izredno popularna.
Podjetje Macromedia je po prevzemu FutureSplash Animator izdalo prvo različico Flash
programskega orodja. Ta je sestavljal Flash IDE in tudi brezplačen Flash Player vtičnik za
brskalnike. Ker je Flash bil zasnovan z mislijo o animiranju vektorske grafike, je bil kot
nalašč za interaktivne vsebine in animacije, saj je omogočal prikaz izredno bogatih vsebin,
ki so vsega skupaj znašale majhno količino podatkov, kar je bilo v času začetka interneta
ob počasnih hitrostih ključnega pomena.
Shockwave je bil zasnovan zaradi želje po prikazu dinamične vsebine in se je na začetku
uporabljal za prikaz vsebin in igric na CD ploščah. Ob prevzemu je Macromedia ob
takratnem internetnem trendu po hitrem postopku preselila tehnologijo na splet, kjer še
danes opazimo nekaj 3D igric, izdelanih s tem vtičnikom. [5], [6], [7]
6
Slika 2.3: Prikaz Shockwave tehnologije preko namenskega vtičnika
2.2.3 Java
Prva različica Java 1.0 je izšla leta 1995. Ena izmed prednosti takrat (in tudi danes) je bila
obljuba, da bo aplikacija napisana v tem jeziku delovala na vseh napravah. Zaradi
podobne sintakse s C/C++ programskim jezikom ter kasneje vtičnikom, ki je omogočal
zagon appleta v spletnem brskalniku, je postal izredno priljubljen. Dandanes ga vidimo v
brskalniku še samo v kakšnih specifičnih spletnih aplikacijah, saj za animiranje že
obstajajo boljše alternative, hkrati pa so brskalniki že pričeli z umikom podpore. Pri
najnovejši različici brskalnika Chrome privzeto ni več možen zagon Java appletov, saj je
bila ta ukinjena z 42 različico Chrome, ki onemogoča NPAPI (Netscape Plugin API)
vtičnike. Za nadaljnje prikazovanje Java appletov je potrebno omogočiti NPAPI podporo v
naprednih nastavitvah, iskreno pa je le vprašanje časa, ko ta opcija ne bo več možna. V
preostalih brskalnikih je potrebno eksplicitno dovoliti zagon Java appleta, v najnovejšem
brskalniku Microsoft Edge pa je podpora popolnoma ukinjena. Iz teh razlogov dandanes
izdelave interaktivne spletne vsebine s pomočjo Java appletov ni več priporočljivo. [8]
7
Slika 2.4: Prikaz nalaganje Java appleta preko namenskega vtičnika
2.3 Analiza obstoječih tehnologij za dosego animacij na spletu
Danes obstaja veliko število tehnologij, ki omogočajo prikaz interaktivnih vsebin ter
animacij. Pri slednjih se še vedno za zahtevne animacije uporabljajo različni vtičniki, kot
so Unity, Flash player, Shockwave, Java, ki jih mora uporabnik imeti naložene pred
ogledom vsebine, hkrati pa obstajajo tudi tehnologije, ki so vgrajene v sam brskalnik.
Animacije se lahko dosežejo s pomočjo CSS3, JavaScript, Canvas ali WebGL.
2.3.1 CSS3
CSS3 je tretja različica priljubljenega jezika, ki skrbi za samo prezentacijo spletne strani.
Čeprav je od izida prve različice do 100 % kompatibilnosti s spletnimi brskalniki na
začetku preteklo več let, ga danes še vedno uporabljamo za stiliranje spletnih strani.
Medtem ko sta prvi dve različici definirali pozicioniranje DOM elementov, izbiro pisav,
barv, senc ter nekaj interaktivnosti s selektorji, kot so hover, focus ipd., smo šele s CSS3
pridobili možnost animiranja elementov preko transition lastnosti.
Sedaj lahko z nekaj vrstic CSS3 ter HTML-ja ustvarjamo preproste animacije, ki so bile
prej možne samo z uporabo JS ali dodatnih vtičnikov.
8
Če brskalnik podpira CSS3 transition lastnost, lahko z njo definiramo, kako se izvaja
animacija bodisi linearno, ease-in ali drugače kot tudi, kako dolgo jo želimo izvajati.
Podamo lahko tudi če želimo izvajati animacijo z zamikom, število ponovitev in katero
CSS lastnost želimo animirati – če te ne podamo, so privzeto animirane vse spremenjene
lastnosti. Zatem kadarkoli spremenimo vrednost CSS lastnosti, kjer je podedovana
transition lastnost, se avtomatsko izvede v njej definirana animacija. Za spreminjanje teh
lastnosti lahko uporabljamo prej omenjene selektorje ali keyframes pravilo.
Pri keyframes definiramo z imenom ter nato znotraj v zavitih oklepajih specificiramo
lastnosti, ki jih želimo animirati v specifične vrednosti v posamezni točki animacije.
V primeru, če nam to ne ustreza in bi želeli več fleksibilnosti, pa se bomo morali obrniti na
JS skriptni jezik, ki bi nam omogočal dinamično nastavljanje CSS vrednosti. [9]
Slika 2.5: Primer CSS3 kode
2.3.2 JavaScript
JavaScript je objektni skriptni programski jezik, ki ga je razvil Netscape, da bi spletnim
programerjem pomagal pri ustvarjanju interaktivnih spletnih strani. Jezik je bil razvit
neodvisno od Jave, vendar si z njo deli številne lastnosti in strukture. Največkrat se ga
uporablja za upravljanje z HTML DOM elementi, s katerimi poživi spletne strani, zadnje
čase pa ga podpirajo tudi ostali programi in servisi (Adobe Photoshop, NodeJS, PDF).
Animiranje elementov na spletni strani je možno z JavaScript-om v navezi z
9
manipuliranjem vrednosti CSS lastnosti, atributi DOM elementa ali neposredno s samim
DOM elementom.
JavaScript podpora je vgrajena v vseh večjih brskalnikih. Velikokrat se zgodi, da dodatni
objekti ali funkcije, ki so na voljo v brskalnikih in niso določeni v ECMA standardu,
preprosto ne obstajajo v specifičnih brskalnikih, so drugače poimenovani ali pa imajo
nepopolno implementacijo. V takšnih primerih je potrebno spisati nadomestne funkcije
(»polyfill«), ki simulirajo manjkajočo funkcionalnost. [10], [11]
Slika 2.6: Primer JS kode
2.3.2.1 Canvas
Canvas je HTML5 element, ki se uporablja za izris grafike. Za animiranje le-te ali splošno
interakcijo je potreben JavaScript jezik. Preko Canvas API, ki ga podpirajo vsi novejši
brskalniki, je možno z JavaScript-om dinamično ustvarjati poljubne like ter jih animirati. Ta
oblika animiranja se največkrat uporablja za posamične manjše zaključne pripomočke na
sami spletni strani ali pa za izdelavo kakšne preprostejše animacije ali igre, ki se izvaja v
svojem okvirju. Prednost animiranja in slabost canvasa je ta, da stanje elementov ni
definirano. To pomeni, da ni možno izvedeti na samem elementu, kje točno ta je v danem
trenutku, ampak je potrebno to beležiti na strani skripte, ki izrisuje oz. animira element v
canvasu. Prednost tega pa je tudi ta, da brskalnik ne potrebuje vsakič, ko se element
premakne v danem trenutku, izračunavati različne vrednosti, kjer ta je, kakšne so njegove
dimenzije in podobno. Zaradi teh razlogov je v primerjavi z animacijami DOM elementov
občutno hitrejši. Slaba stran animacij v canvasu se izkaže v primerih, če bi te poganjali na
novejših HiDPI napravah, ki imajo na zaslonu večje število pikslov na palec. Ker se ob
vsakem premiku izrisuje celoten canvas element, v rasterski obliki to pomeni, da lahko
zmogljivost na teh napravah zaradi slabše strojne opreme (predvsem mobilne naprave)
drastično upade. [12], [13]
10
2.3.2.2 WebGL
WebGL je JavaScript API, ki omogoča renderiranje 3D objektov na canvas DOM element.
Za razliko od ostalih načinov animiranja ta potrebuje poleg podpore brskalnika tudi strojno
podporo za WebGL. Ker se ga uporablja v kombinacij s canvasom, imata oba skupaj
precej podobne lastnosti. WebGL za razliko od 2D canvas API-ja izvaja matematične
operacije namesto na procesorju kar na grafični kartici. Zaradi tega so animacije preko
WebGL tudi v 3D izredno tekoče. [14], [15], [16]
Slika 2.7: Logotip WebGL
3 OPIS UPORABLJENIH TEHNOLOGIJ
V diplomskem delu smo se odločili preveriti, kako tekoče so animacije z uporabo HTML5,
JavaScript, jQuery + UI in CSS3 tehnologij. Zanje smo se odločili, saj uporabljajo vgrajene
tehnologije, ki so na voljo v vseh popularnih brskalnikih in izvajajo animacije nad DOM
elementi. Zato v diplomskem delu, kjer smo testirali, nismo pokrivali različnih vtičnikov
(Flash, Java, Silverlight...) ali uporabe canvas oz. WebGL.
3.1 HTML5
HTML5 je peta različica označevalnega jezika, ki nam omogoča v glavi dokumenta
vključiti pravila, ki jih morajo mobilne naprave spoštovati. V diplomski nalogi smo se
posluževali predvsem »Viewport« meta HTML znački, ki mobilni napravi sporoči stopnjo
povečave in prilagodi širino HTML dokumenta zaslonu naprave. S tem smo se izognili
težavi, kjer bi bila spletna stran po uspešnem nalaganju prikazana precej pomanjšana.
[17]
12
3.2 Javascript
JavaScript je nepogrešljiv jezik, ki smo ga uporabili pri vseh testih zaradi lažjega testiranja
in začetne postavitve testnega okolja. Kasneje smo ga pri specifičnih testih uporabljali za
animiranje s pomočjo spreminjanja osnovnih css lastnosti, kot so širina, višina, odmiki.
3.3 jQuery + UI
jQuery je ena izmed najbolj popularnih knjižic, ki temelji na JavaScript jeziku in nam
omogoča manipuliranje z DOM elementi na sintaktično lažji način. Knjižica sama poskrbi
za manjkajoče funkcionalnosti in napake med različnimi brskalniki ter nam tako olajša delo
med programiranjem. Zadnje čase to knjižico vse bolj izpodrivajo najnovejše različice
JavaScripte, saj so funkcionalnosti, ki jih jQuery ponuja že privzeto vgrajene in na voljo.
jQuery UI je dodatna knjižica za jQuery in nam omogoča dodatne funkcije pri delu z DOM
elementi, ali le-te priredi za mobilne naprave. Konkretno smo jo v naših testnih primerih
uporabili za animiranje spremembe barv v DOM elementih.
Slika 3.2: Primer JS kode z uporabo jQuery funkcij
3.4 CSS3
CSS3 smo pri nalogi uporabili za animiranje DOM elementov. V pomoč so nam prišle prav
lastnosti v tretji enačici CSS-a, ki so namenjene animaciji. Te so:
Transform – omogoča transformiranje elementov z uporabo translate, skew, scale
in podobnih akcij,
Translate – namenjena animaciji elementov po x ali y osi,
Transition – namenjena podajanju informacij o sami želeni animaciji,
Keyframes – namenjena podajanju same poti animacije.
13
4 IZDELAVA TESTNEGA OKOLJA
Za lažje testiranje in primerjavo domorodnih CSS3 animacij in animacij z uporabo
JavaScript-a smo izdelali spletno stran, kjer primerjamo 3 različne in hkrati najbolj pogoste
manipulacije in animacije DOM elementov. Zaobsegli smo naslednje:
animacija elementov po X osi,
sprememba velikosti elementov,
sprememba barve elementov.
Za vsako manipulacijo smo s čimvečjim približkom izdelali teste z uporabo naslednjih
danes najbolj pogosto uporabljenih tehnologij:
CSS3 + JavaScript,
JavaScript,
jQuery.
V vseh primerih smo uporabljali JavaScript jezik za lažje generiranje DOM elementov, pri
čemer smo delo animacije prepustili bodisi CSS3, JavaScript ali jQuery knjižici. Pri testih
smo zaradi lažjega zbiranja informacij in splošnega testiranja na mobilnih napravah
uporabljali še PHP jezik na strežniški strani in tudi uporabo piškotkov ter GET parametrov
v navezi z JavaScript-om.
Piškotke smo uporabljali za lažjo sledljivost, katera naprava je izvajala kateri test, medtem
ko smo preko GET parametrov pripravili specifični test brez dodatnega dela oz. vnašanja
podatkov na sami napravi. Ob koncu testiranja posamičnega testa smo zbrane podatke
pošiljali iz mobilne naprave na lokalni strežnik, točneje PHP datoteki, ki je podatke
shranila v ločeno datoteko. Informacije v teh datotekah smo kasneje uporabili pri izdelavi
končnih rezultatov in grafov v programu Office Excel.
14
Slika 4.1: Testno okolje – Animacija elementov po x osi s pomočjo CSS3 in JS
4.1 Orodje za zaznavo FPS
Potrebovali smo nekakšen način preverbe zmogljivosti naših animacij. Prvotna ideja je
bila uporabiti za ta namen orodja za razvijalce, ki so na voljo v vseh novejših brskalnikih.
Po začetnem testiranju smo opazili, da vsi brskalniki ne nudijo opcije preprostega
pregleda števila sličic na sekundo. Brskalnik Chrome to omogoča, medtem ko je pri
ostalih možno okvirno izvedeti to informacijo s pogledom grafa v časovnem (Timeline)
zavihku. Ker smo teste poganjali tudi na večjem številu naprav, smo želeli priti do teh
informacij z avtomatizacijo.
Na spletu smo zasledili nekaj orodij, ki omogočajo beleženje števila sličic na sekundo s
pomočjo JavaScript-a. Večina orodij na spletu je bila zasnovana tako, da bomo ob vsaki
spremembi lastnosti elementa klicali funkcijo, ki bi nato štela FPS. Ta rešitev bi prišla prav
15
v primerih, kjer bi izvajali animacije izključno z uporabo JavaScript-a, vendar ker tukaj
primerjamo tudi animacije s CSS3, teh nismo mogli uporabiti, saj v teh primerih ne
kličemo funkcije, ki bi animirala elemente po korakih in zato torej ne moremo beležiti FPS
s pomočjo teh orodij.
Kasneje smo na spletu našli knjižico oz. orodje, ki uporablja podoben princip, vendar pa
izvaja animacijo izključno v ločenem DOM elementu ter uporablja CSS3 za animacijo
preprostega elementa. S pomočjo uporabe requestAnimationFrame funkcije ali v primerih
da ta ni podprt, setInterval funkcije skuša čim večkrat izračunati odmik samega elementa,
dokler ta ne prispe do konca animacije v 1 sekundi. Ob tem dogodku izračuna, kolikokrat
smo bili uspešni pri izračunu odmika elementa ter nam nato sporoči ta rezultat. Zatem se
animacija ponovno ponovi, števec pa resetira za naslednjo sekundo in tako naprej, dokler
ne zaključimo s testiranjem. Ker se na ta način ne zanašamo več na klic funkcije v
vsakem koraku animacije naših elementov, smo s tem močno poenostavili testiranje in se
hkrati izognili dodatni obremenitvi samega testiranja z odvečnimi JS klici.
V kasnejšem testiranju smo opazili pomanjkljivost pri meritvi CSS3 animacij, kjer je orodje
za razvijalce sporočilo večje število sličic na sekundo, kot nam je sporočao izbrani JS
FPSMeter. Ker bi bili z interaktivnostjo animacije ali aplikacije vezani na čas, kadar bi se
lahko najhitreje prožila naslednja requestAnimationFrame ali setInterval funkcija, smo
navkljub netočnosti prikaza animacije upoštevali število proženj teh funkcij. [18]
16
Slika 4.2: Prikaz rezultatov testiranja v testnem okolju
4.2 Implementacija orodij za animiranje
Pri animacijah smo si pomagali s funkcijami in lastnostmi, ki so na voljo v jezikih
JavaScript, HTML5 in CSS3 in tudi z uporabo zunanjih knjižic. Osnova kode je bolj ali
manj nespremenjena pri vseh implementacijah. Razlikuje se le v načinu in tehnologiji
animacije. Zaradi obsega smo predstavili le bistvene dele kode in podali kratko
obrazložitev.
17
4.2.1 Implementacija z uporabo JavaScript-a
Pri implementaciji z uporabo JavaScript-a smo urejali CSS lastnosti DOM elementov. Pri
implementaciji animacije spreminjanja barve elementov smo si pomagali tudi z zunanjo JS
knjižico. Za tekočo animacijo smo uporabljali requestAnimationFrame funkciji. Če ta ne bi
obstajala, bi uporabljali setInterval funkcijo, ki bi skrbela za naslednji korak animacije.
4.2.1.1 Animacija elementov po X osi
Za uspešno animacijo premika elementov po X osi od skrajne leve do desne strani ekrana
smo potrebovali širino dokumenta, ki je na voljo. Glede na velikost elementa, širine
ekrana, poti in čas poti, v katerem jo mora element prepotovati, smo lahko izračunali
posamičen korak. Nato smo v vsakem klicu requestAnimationFrame funkcije premaknili
element za določen korak. Ko je element prišel do konca, smo element pričeli premikati v
nasprotno smer in kasneje zopet obratno, tako da smo zaključili animacijo elementa v
nedogled.
18
4.2.1.2 Sprememba velikosti elementov
Pri spreminjanju velikost elementov smo se držali podobnih načel. Tukaj smo za razliko
od prejšnjega testa manipulirali s širino in višino elementa namesto z nastavitvijo levega
odmika v CSS.
jsAnimation.prototype._animate = function(element) { var reverse = false; var elementWidth = parseInt(element.style.width); var position = 0; var sizeWidth = this.size.width; var step = parseFloat(((sizeWidth - elementWidth) / (this.animationTime * 60))); var moveElement = function(element) { element = element instanceof Element ? element : element.target; if (reverse) { if (element.style.left == '0px') { reverse = false; position += step; element.style.left = position + 'px'; } else { if (position - step < 0) { element.style.left = '0px'; } else { position -= step; element.style.left = position + 'px'; } } } else { if (element.style.left == (sizeWidth - elementWidth) + 'px') { reverse = true; position -= step; element.style.left = position + 'px'; } else { if (position + step > (sizeWidth - elementWidth)) { element.style.left = (sizeWidth - elementWidth) + 'px'; } else { position += step; element.style.left = position + 'px'; } } } requestAnimationFrame(function(){ moveElement(element); }); }; requestAnimationFrame(function(){ moveElement(element); }); };
19
jsAnimation.prototype._animate = function(element) { var reverse = false; var size = parseInt(element.style.width); var maxSize = this.defaultValues.scaleMaxSize; var minSize = this.defaultValues.scaleMinSize; var stepFirstTime = parseFloat(((maxSize - size) / (this.animationTime * 60))); var step = parseFloat(((maxSize - minSize) / (this.animationTime * 60))); var moveElement = function(element, firstTime) { element = element instanceof Element ? element : element.target; if (reverse) { if (element.style.width == minSize + 'px' && element.style.height == minSize + 'px') { reverse = false; size += step; element.style.width = size + 'px'; element.style.height = size + 'px'; } else { if (size - step < minSize) { element.style.width = minSize + 'px'; element.style.height = minSize + 'px'; } else { size -= step; element.style.width = size + 'px'; element.style.height = size + 'px'; } } } else { if (element.style.width == maxSize + 'px' && element.style.height == maxSize + 'px') { reverse = true; if (firstTime) { firstTime = false; } size -= step; element.style.width = size + 'px'; element.style.height = size + 'px'; } else { if (size + (firstTime ? stepFirstTime : step) > maxSize) { element.style.width = maxSize + 'px'; element.style.height = maxSize + 'px'; } else { size += (firstTime ? stepFirstTime : step); element.style.width = size + 'px'; element.style.height = size + 'px'; } } } requestAnimationFrame(function(){ moveElement(element, firstTime); }); }; requestAnimationFrame(function(){ moveElement(element, true); }); };
20
4.2.1.3 Sprememba barve elementov
Pri animaciji spremembe barv elementov, smo si pomagali s Sweep JS knjižico z
namenom točnejše animacije vmesnih barv med začetno in končno barvo. Barve se
menjujejo v zaporedju rdeča, zelena, modra in obratno. [19]
4.2.2 Implementacija z uporabo jQuery + UI knjižice
Pri implementaciji z uporabo jQuery smo uporabljali funkcije, ki nam jih knjižica ponuja za
manipuliranje elementov. Preden smo lahko uporabili to knjižico, smo jo morali vključiti v
HTML dokument.
jsAnimation.prototype._animate = function(element) { // starts the animation var getAnimationOptions = function(callback) { return { duration: 1000, callback: callback, space: 'RGB' }; }; var forthTransition = function() { sweep(element, 'backgroundColor', '#00ff00', '#ff0000', getAnimationOptions(firstTransition)); }; var thirdTransition = function() { sweep(element, 'backgroundColor', '#0000ff', '#00ff00', getAnimationOptions(forthTransition)); }; var secondTransition = function() { sweep(element, 'backgroundColor', '#00ff00', '#0000ff', getAnimationOptions(thirdTransition)); }; var firstTransition = function() { sweep(element, 'backgroundColor', '#ff0000', '#00ff00', getAnimationOptions(secondTransition)); }; firstTransition(); };
21
4.2.2.1 Animacija elementov po X osi
Pri implementaciji smo takoj opazili, da je bilo precej lažje doseči cilj z uporabo jQuery
knjižice ter vgrajene animate funkcije. Preračunavanje korakov in ostalih zadev smo z
lahkoto prepustili sami jQuery knjižici. Potrebno je bilo le sporočiti želene končne pozicije,
čas animacije, časovno funkcijo za animacijo ter funkcijo, ki se naj kliče ob uspešni
zaključeni animaciji.
4.2.2.2 Sprememba velikosti elementov
Pri spreminjanju velikosti elementov smo uporabili identično tehniko. Spremenjene so bile
le CSS lastnosti, ki smo jih spreminjali na samem elementu.
jQueryAnimation.prototype._animate = function(element) { var elementWidth = parseInt(element.style.width); var sizeWidth = this.size.width; var animationTime = this.animationTime; var animate = function() { $(element).animate({'left': (sizeWidth - elementWidth) + 'px'}, animationTime, 'linear').animate({'left': '0px'}, animationTime, 'linear', animate); }; animate(); };
jQueryAnimation.prototype._animate = function(element) { var elementWidth = parseInt(element.style.width); var sizeWidth = this.size.width; var animationTime = this.animationTime; var animate = function() { $(element) .animate({ 'width': this.defaultValues.scaleMaxSize + 'px', 'height': this.defaultValues.scaleMaxSize + 'px' }, animationTime, 'linear') .animate({ 'width': this.defaultValues.scaleMinSize + 'px', 'height': this.defaultValues.scaleMinSize + 'px' }, animationTime, 'linear', animate); }.bind(this); animate(); };
22
4.2.2.3 Sprememba barve elementov
Tako kot prejšnji dve animaciji smo tudi spremembo barve elementa dosegli z enakimi
funkcijami. Slabost je le ta, da smo morali vključiti dodatno UI knjižico za jQuery, saj bi v
nasprotnem primeru lahko le nastavljali barve brez animacij in z njim povezanih vmesnih
barv.
4.2.3 Implementacija z uporabo CSS3 standarda
Pri CSS3 smo skušali prenesti vso breme na CSS, pri čemer bi JS služil samo na začetku
za vzpostavitev potrebnih CSS pravil, ki so bile potrebna za animacijo. Da smo lahko
celotno animacijo opravili s pomočjo CSS3, smo uporabili keyframes. Ker je potrebno
keyframes definirati na začetku, smo zaradi tega omejeni na fiksno animacijo ali pa je
potrebno ustvariti specifično pot za vsak element posebej, kar lahko pomeni veliko število
CSS vrstic. Pri testiranju smo glede na največji element generirali CSS keyframes, tako
da elementi večji od tega niso bili prikazani izven okna brskalnika.
jQueryAnimation.prototype._animate = function(element) { var elementWidth = parseInt(element.style.width); var sizeWidth = this.size.width; var animationTime = this.animationTime; var animate = function() { $(element) .animate({ backgroundColor: '#00ff00' }, animationTime, 'linear') .animate({ backgroundColor: '#0000ff' }, animationTime, 'linear') .animate({ backgroundColor: '#00ff00' }, animationTime, 'linear') .animate({ backgroundColor: '#ff0000' }, animationTime, 'linear', animate); }.bind(this); animate(); };
23
4.2.3.1 Animacija elementov po X osi
Pri animaciji elementov po X osi smo na podlagi širine dokumenta v brskalniku in
največjega možnega elementa izračunali, kakšno pot lahko ta element opravi, da še
vedno ostane znotraj mej. Elementi, ki so manjši, imajo v tem primeru krajšo pot. Paziti
smo morali tudi na CSS3 podporo v brskalnikih.
cssAnimation.prototype._setUpCSSAnimation = function() { var keyframePrefix = getAnimationKeyframePrefix(), style = document.createElement('style'); style.type = 'text/css'; document.head.appendChild(style); var stylesheet = document.styleSheets[0]; stylesheet.insertRule( '@' + keyframePrefix + 'keyframes animateBoxy {' + 'from { ' + this.supportedTransform + ': ' + 'translateX(0px); } ' + 'to { ' + this.supportedTransform + ': ' + 'translateX(' + (this.size.width <= this.defaultValues.maxSize ? 0 : this.size.width - this.defaultValues.maxSize) + 'px); }' + '}', stylesheet.rules.length ); function getAnimationKeyframePrefix() { var animation = false, animationString = 'animation', keyframePrefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), pfx = '', elm = document.createElement('div'); if (elm.style.animationName !== undefined) { animation = true; } if (animation === false) { for (var i = 0; i < domPrefixes.length; i++) { if (elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined) { pfx = domPrefixes[ i ]; animationString = pfx + 'Animation'; keyframePrefix = '-' + pfx.toLowerCase() + '-'; animation = true; break; } } } return keyframePrefix; } };
24
4.2.3.2 Sprememba velikosti elementov
Pri spreminjanju velikost elementov smo uporabljali enako predlogo, le da smo v tem
primeru spreminjali širino in višino elementa. Pri tem smo uporabljali enaka načela, da bi
elementi ostajali znotraj mej brskalnika.
cssAnimation.prototype._setUpCSSAnimation = function(firstTime) { var keyframePrefix = getAnimationKeyframePrefix(), style = document.createElement('style'); style.type = 'text/css'; document.head.appendChild(style); var stylesheet = document.styleSheets[0]; if (!firstTime) { stylesheet.deleteRule(stylesheet.rules.length - 1); } stylesheet.insertRule( '@' + keyframePrefix + 'keyframes animateBoxy {' + 'from { height: ' + this.defaultValues.scaleMinSize + 'px; width: ' + this.defaultValues.scaleMinSize + 'px; } ' + 'to { height: ' + this.defaultValues.scaleMaxSize + 'px; width: ' + this.defaultValues.scaleMaxSize + 'px; } ' + '}', stylesheet.rules.length ); function getAnimationKeyframePrefix() { var animation = false, animationString = 'animation', keyframePrefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), pfx = '', elm = document.createElement('div'); if (elm.style.animationName !== undefined) { animation = true; } if (animation === false) { for (var i = 0; i < domPrefixes.length; i++) { if (elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined) { pfx = domPrefixes[ i ]; animationString = pfx + 'Animation'; keyframePrefix = '-' + pfx.toLowerCase() + '-'; animation = true; break; } } } return keyframePrefix; } };
25
4.2.3.3 Sprememba barve elementov
Pri spreminjanju barv smo prišli do težave, saj smo morali animirati tri barve. V keyframe
lahko pot podamo od določene do določene točke, v nasprotnem primeru pa s procenti. V
zadnjem koraku smo bili zato primorani dodati 1 % do zaključenih 100 % poti animacije ali
pa vse korake v odstotkih specificirati na nekaj decimalk.
26
5 REZULTATI ANALIZE
Izdelane teste smo poganjali na naslednjih mobilnih napravah in brskalnikih:
- iPhone 6s Plus - iOS 9.3:
o Chrome - 52.0.2743.84,
o Safari - 601.1 (vgrajeni);
cssAnimation.prototype._setUpCSSAnimation = function(firstTime) { var keyframePrefix = getAnimationKeyframePrefix(), style = document.createElement('style'); style.type = 'text/css'; document.head.appendChild(style); var stylesheet = document.styleSheets[2]; if (!firstTime) { stylesheet.deleteRule(stylesheet.rules.length - 1); } stylesheet.insertRule( '@' + keyframePrefix + 'keyframes animateBoxy {' + '33% { background-color: #ff0000 } ' + '66% { background-color: #00ff00 } ' + '100% { background-color: #0000ff } ' + '}', stylesheet.cssRules.length ); function getAnimationKeyframePrefix() { var animation = false, animationString = 'animation', keyframePrefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), pfx = '', elm = document.createElement('div'); if (elm.style.animationName !== undefined) { animation = true; } if (animation === false) { for (var i = 0; i < domPrefixes.length; i++) { if (elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined) { pfx = domPrefixes[ i ]; animationString = pfx + 'Animation'; keyframePrefix = '-' + pfx.toLowerCase() + '-'; animation = true; break; } } } return keyframePrefix; } };
27
- Sony Xperia Z3 - Android 5.0.2:
o Chrome - 52.0.2743.98,
o Chrome - 40.0.2214.89 (vgrajeni);
- Samsung Galaxy S5 - Android 5.0:
o Chrome - 52.0.2743.98,
o Chrome - 44.0.2403.133 (vgrajeni);
- Samsung Galaxy S7 - Android 6.0.1:
o Chrome - 52.0.2743.98,
o Chrome - 44.0.2403.133 (vgrajeni),
o Firefox - 48.0;
- Samsung Note 4 - Android 6.0.1:
o Chrome - 52.0.2743.98,
o Chrome - 44.0.2403.133 (vgrajeni),
o Firefox - 48.0;
- iPhone 5C - iOS 9.3.2:
o Safari - 601.1 (vgrajeni).
Slika 5.1: Testiranje na mobilnih napravah
5.1 Podpora s strani brskalnikov
Pri animacijah, opravljenih izključno s pomočjo JavaScript-a ali jQuery knjižice in
manipuliranjem osnovnih CSS lastnosti, dandanes težko najdemo brskalnik, ki tega ne bi
omogočal. Problemi lahko nastajajo v primerih, kjer bi uporabniki onemogočili izvajanje JS
28
v brskalniku. V teh primerih bi animacije lahko dosegli le z CSS3 na brskalnikih, ki bi ga
podpirali. Hkrati bi ob tem morali te animacije popolnoma izolirati od JS za nemoteno
delovanje v takšnih primerih. V praksi bi tako dosegli le najpreprostejše animacije. Pri
kompatibilnosti CSS3 lastnosti pa kljub hitrim popravkom in posodobitvam brskalnikov ti
še vedno niso popolnoma kompatibilni, kar smo opazili tudi pri izvajanju naših testov.
Pri večjem številu DOM elementov se pri CSS3 animacijah dogaja, da postanejo animirani
elementi delno odrezani ali skriti. V določenem primeru se je pri izvajanju testa, ki bazira
na CSS3 animaciji na Samsung Galaxy S7 napravi zgodilo tudi, da se je sama ugasnila in
ponovno zagnala. Pri nekaterih lastnostih je še vedno potrebno pred lastnostmi dodajati
ime pogona brskalnika: -webkit-, -moz- in podobno.
5.2 Težavnost implementacije
Iz primerkov kode, ki so bili podani v enem izmed prejšnjih poglavij, smo z lahkoto
ugotovili, da je najmanj kode potrebno prav pri uporabi jQuery knjižice. JavaScript
postavljamo na drugo mesto, saj lahko sicer z malo več kode še vedno popolnoma
dinamično upravljamo posamezen DOM element. CSS3 na podlagi težavnosti
implementacije postavljamo na zadnje mesto, saj v animacije s pomočjo keyframe
lastnosti ne morejo doseči ekvivalentne stopnje dinamičnosti kot tiste izdelane z JS ali
jQuery knjižico.
5.3 Hitrost animacije
Pri testiranju animacije dosežene s CSS3 na videz izpadejo bolj tekoče. Kljub temu da se
animacije pri CSS3 izvajajo na ločenih kompozicijskih plasteh, pa vseeno negativno
vplivajo na število klicev requestAnimationFrame funkcije. V naslednjih podpoglavjih so
prikazani grafi meritev animacij na podlagi števila klicev na requestAnimationFrame.
V grafih na Y osi prikazujemo število klicev na requestAnimationFrame, medtem ko po x
osi pretečeni čas do zaključka animacije.
29
5.3.1 Chrome
5.3.1.1 Animacija po X osi – CSS3 + JS
Galaxy S7 se je ob bremenu prikaza nad 300 elementov ugasnil in ponovno prižgal. V
zgornjem grafu je prikazal le maksimalno število 300 elementov. Ostali brskalniki so
animirali 450 elementov.
Graf 5.1: Animacija po X osi z uporabo CSS3 + JS v brskalniku Chrome
Iz grafa je razvidno, da je najhitreje prikazal vseh 450 elementov Samsung Galaxy S5,
medtem ko je iPhone 6s ohranjal največje število klicev na requestAnimationFrame.
Galaxy S7 je imel od ostalih Android naprav precej višje rezultate.
30
5.3.1.2 Animacija po X osi – JavaScript
iPhone 6s Plus je pri izvajanju tega testa ob generiranju več kot 150 krogov preventivno
prenehal z izvajanjem testa v zavihku in ga ponovno zagnal z obvestilom o neljubem
dogodku. Zaradi tega smo morali omejiti maksimalno število generiranih krogov na 150.
Graf 5.2: Animacija po X osi z uporabo JS v brskalniku Chrome
Kljub največjim številom klicev na requestAnimationFrame iPhone 6s Plus je ta potreboval
polovico časa za prikaz animacije 150 krogov, medtem ko so preostale naprave bile
zmožne generirati in prikazati 450 krogov. Opazimo lahko tudi da Samsung Note 4 pri
manjšem številu generiranih krogov za malenkost prednjači pred ostalimi Android
napravami.
5.3.1.3 Animacija po X osi – jQuery
V tem in vseh naslednjih primerih smo preko brskalnika Chrome morali na iPhone 6s Plus
poganjati test pri maksimalno 150 generiranih krogih, saj nam v nasprotnem primeru ne bi
uspelo uspešno izvesti testa s končnimi rezultati.
31
Graf 5.3: Animacija po X osi z uporabo jQuery v brskalniku Chrome
Pri številu prikazu števila sličic na sekundo vodi iPhone 6s Plus, medtem ko z animacijo
450 elementov prvi zaključi Samsung Galaxy S7. Možno je takoj opaziti, da se je čas
animacije 450 elementov s pomočjo jQuery knjižice podaljšal tudi za 12 sekund.
5.3.1.4 Sprememba velikosti elementov – CSS3 + JS
Pri prikazu klicev na requestAnimationFrame opazimo v spodnjem grafu, da pri animaciji
spremembe velikosti elementov močno vodi iPhone 6s Plus, medtem ko Galaxy Note 4
uspešno kot prvi zaključi animacijo.
32
Graf 5.4: Sprememba velikosti elementov z uporabo CSS3 + JS v brskalniku Chrome
Opaziti je možno da kljub boljšim začetnim rezultatom števila klicev
requestAnimationFrame funkcije pri Samsung Note kasneje prevlada iPhone 6s Plus.
5.3.1.5 Sprememba velikosti elementov – JavaScript
Pri spremembi velikosti elementov z uporabo JavaScript-a smo opazili da je Samsung
Galaxy S5 pri testu med 2. sekundo in 8. sekundo prikazal več ali enako število sličic na
sekundo kot njegov precej bolje strojno podkovani naslednik Galaxy S7.
33
Graf 5.5: Sprememba velikosti elementov z uporabo JS v brskalniku Chrome
5.3.1.6 Sprememba velikost elementov – jQuery
Pri poganjanju testa, izdelanega z jQuery knjižico, lahko opazimo izredno daljše čase za
uspešen zaključek animacije 450 elementov v primerjavi s tehnologijo CSS3 ali
JavaScript.
34
Graf 5.6: Sprememba velikosti elementov z uporabo jQuery v brskalniku Chrome
iPhone 6s Plus je skozi animacijo dosegal najvišje rezultate, medtem ko je Samsung
Galaxy S7 bil prvi, ki je uspešno dokončal test. Na zadnjem mestu lahko opazimo
Samsung Galaxy S7, ki je potreboval 47 sekund za dokončanje testa.
5.3.1.7 Sprememba barve elementov – CSS3 + JS
Pri spreminjanju barve elementov z uporabo CSS3 iPhone 6s ni animiral spremembe
barv. Kljub temu da je bil zmožen poganjati test do konca z dobrimi rezultati za ceno
nezmožnosti animiranja barv, smo ga izključili iz grafa.
35
Graf 5.7: Sprememba barve elementov z uporabo CSS3 + JS v brskalniku Chrome
Čas za uspešen zaključek testa je bil med napravami z razliko Sony Xperie Z3 enak.
Samsung Note 4 z boljšo strojno opremo kot ostale testne naprave zmore prikazati na
začetku največ sličic na sekundo, kasneje pa lahko opazimo, da ga med 3. in 8. sekundo
prehiteva presenetljivo slabše podkovana naprava Sony Xperia.
5.3.1.8 Sprememba barve elementov – JavaScript
Pri tem testu smo opazili, da je iPhone 6s Plus zmožen animirati samo do 150 elementov,
ki skozi animacijo spreminjajo barvo.
36
Graf 5.8: Sprememba barve elementov z uporabo JS v brskalniku Chrome
Spet lahko opazimo, da je kljub nižji omejitvi maksimalnega števila generiranja krogov
iPhone 6s s prepričljivo razliko v številu prikaza sličic na sekundo vodil pred drugimi
napravami. Note 4 je med Android napravami na začetku animacije zmogel prikazati na
ekranu naprave 6 sličic na sekundo več kot preostale Android naprave.
5.3.1.9 Sprememba barve elementov – jQuery
Kot v vseh prejšnjih primerih, lahko opazimo, da uporaba jQuery knjižice kljub izredno
enostavni implementaciji znatno podaljša čas za uspešno generiranje 450 elementov, ki
spreminjajo barvo.
37
Graf 5.9: Sprememba barve elementov z uporabo jQuery v brskalniku Chrome
iPhone 6s je bil, da bi se izognili sesutju zavihka v brskalniku ponovno omejen na
maksimalno 150 generiranih DOM elementov, medtem ko so preostale naprave bile
zmožne končati test z generiranjem in animiranjem 450 elementov. Prva naprava, ki je
uspešno zaključila test, je bila Samsung Galaxy S7 v 22 sekundah, medtem ko je Sony
Xperia Z3 potrebovala 105 sekund.
5.3.2 Firefox
Po seriji testiranj v brskalniku Firefox smo bili zaradi slabe zmogljivosti primorani
zmanjšati maksimalno število generiranih DOM elementov na 150. Zaradi enake različice
mobilnega brskalnika Firefox so bili rezultati zaradi razlike v strojni opremi mobilnih naprav
konsistentni. V vseh primerih se bolje odreže Samsung Galaxy S7, medtem ko se na
trenutke Note 4 tesno približa pri prikazu števila sličic na sekundo.
38
5.3.2.1 Animacija po X osi – CSS3 + JS
V spodnjem grafu lahko opazimo, da je Samsung Galaxy S7 sicer z majhno prednostjo v
številu klicev requestAnimationFrame funkcije uspel za 12 sekund hitreje animirati 150
elementov kakor Note 4.
Graf 5.10: Animacija po X osi z uporabo CSS3 + JS v brskalniku Firefox
39
5.3.2.2 Animacija po X osi – JavaScript
Pri JS implementaciji animacije DOM elementov po X osi lahko opazimo, da sta v danem
trenutku obe napravi za krajši čas dosegali identične rezultate pri številu prikaza sličic na
sekundo. Samsung Galaxy S7 je uspešno zaključil test pred Note 4 za 10 sekund.
Graf 5.11: Animacija po X osi z uporabo JS v brskalniku Firefox
40
5.3.2.3 Animacija po X osi – jQuery
Pri poganjanju testa animacije po X osi s pomočjo jQuery smo pri Note 4 opazili, da je
potreboval 3 sekunde več časa za zaključek animacije vseh objektov kot pri poganjanju
testa izdelanega z JS. Samsung Galaxy S7 skozi celoten čas animacije vodi v številu
prikaza sličic na sekundo in ga uspešno konča pri 25 sekundah. Note 4 uspešno zaključi
test 14 sekund kasneje.
Graf 5.12: Animacija po X osi z uporabo jQuery v brskalniku Firefox
5.3.2.4 Sprememba velikosti elementov – CSS3 + JS
Preverjanje spremembe velikosti elementov s pomočjo CSS3 v Firefox brskalniku ni bila
možna zaradi JS napake.
41
5.3.2.5 Sprememba velikosti elementov – JavaScript
Pri testiranju animacije, kjer spreminjamo velikost elementov, smo na začetku opazili
porast števila prikaza sličic na sekundo v 2 sekundi pri napravi Samsung Galaxy S7.
Animacijo je prvi uspešno zaključil Galaxy S7, Note 4 pa je zaostajal za 18 sekund.
Graf 5.13: Sprememba velikosti elementov z uporabo JS v brskalniku Firefox
42
5.3.2.6 Sprememba velikost elementov – jQuery
Pri spremembi velikosti elementov smo opazili enak čas, ki ga je Samsung Note 4
potreboval, kljub temu da je bila razlika pri testiranju v Chrome brskalniku med JS in
jQuery implementacijo precej bolj izrazita. Slednja se je namreč izkazala za približno 14
sekund počasnejšo.
Graf 5.14: Sprememba velikosti elementov z uporabo jQuery v brskalniku Firefox
5.3.2.7 Sprememba barve elementov – CSS3 + JS
Analiza animacije spremembe barve elementov s pomočjo CSS3 v Firefox brskalniku ni
bila možna zaradi JS napake.
43
5.3.2.8 Sprememba barve elementov – JavaScript
Pri spremembi barv elementov na testnih mobilnih napravah se je izkazal Samsung
Galaxy S7, kjer je ob pričetku animacije prikazal za 8 sličic več od Note 4. Prav tako je
animacijo končal pri 23 sekundah, medtem ko je za identični test Note 4 potreboval 10
sekund več.
Graf 5.15: Sprememba barve elementov z uporabo JS v brskalniku Firefox
5.3.2.9 Sprememba barve elementov – jQuery
Pri izvajanju iste animacije z uporabo jQuery smo opazili počasnejše animiranje DOM
elementov na začetku kot pri implementaciji testa z JS. Razlika med tema dvema
implementacijama je za približno 10 % v prid JS implementaciji.
44
Graf 5.16: Sprememba barve elementov z uporabo jQuery v brskalniku Firefox
5.3.3 Vgrajeni brskalniki
5.3.3.1 Animacija po X osi – CSS3 + JS
Android naprave na vgrajenih brskalnikih niso bile zmožne prikazati več kot 50 animiranih
elementov, medtem ko sta iPhone-a generirala vseh 450 krogov.
45
Graf 5.17: Animacija po X osi z uporabo CSS3 + JS v vgrajenem brskalniku
Iz grafa je razvidno, da se je presenetljivo najbolje med Android napravami odrezal prav
Samsung Galaxy S5. Uspešen zaključek testa z 50 elementi so vse Android naprave
končale v 6 sekundah.
46
5.3.3.2 Animacija po X osi – JavaScript
Pri animiranju elementov po X osi z uporabo JavaScript jezika smo morali nastaviti limit
generiranih elementov pri iPhone 6s plus na maksimalno 150.
Graf 5.18: Animacija po X osi z uporabo JS v vgrajenem brskalniku
Presenetljivo se je tukaj zopet izredno dobro odrezal Samsung Galaxy S5. Prva mobilna
naprava, ki je končala animacijo, pa je bila Sony Xperia Z3.
47
5.3.3.3 Animacija po X osi – jQuery
V tem in vseh naslednjih primerih smo bili primorani na iPhone 6s Plus poganjati test pri
maksimalno 150 generiranih krogih.
Graf 5.19: Animacija po X osi z uporabo jQuery v vgrajenem brskalniku
Galaxy S5 zopet za nekaj sličic na sekundo premaga ostale Android naprave kljub daljši
izvedbi procesa generiranja krogov. Najhitrejša mobilna naprava, ki opravi test v 17
sekundah, je bila Samsung Galaxy S7.
5.3.3.4 Sprememba velikosti elementov – CSS3 + JS
V tem testu smo morali poleg iPhone 6s Plus omejiti tudi iPhone 5c, in sicer na
maksimalno 150 generiranih DOM elementov.
48
Graf 5.20: Sprememba velikosti elementov z uporabo CSS3 + JS v vgrajenem brskalniku
5.3.3.5 Sprememba velikosti elementov – JavaScript
V spodnjem grafu je mogoče opaziti boljšo zmogljivost Galaxy S5 pri manjšem številu
generiranih krogov. Največ časa za prikaz 450 animiranih elementov je porabil iPhone 5c.
Graf 5.21: Sprememba velikosti elementov z uporabo JS v vgrajenem brskalniku
49
5.3.3.6 Sprememba velikost elementov – jQuery
Pri poganjanju testa izdelanega z jQuery knjižico opazimo, da najbolj prednjačita Galaxy
S7 in Note 4. iPhone 6s plus je omejen na 150 generiranih krogov, medtem ko smo pri
iPhone 5c bili primorani omejiti število DOM elementov na 300. Največ časa je za prikaz
vseh elementov je potreboval Samsung Galaxy S5.
Graf 5.22: Sprememba velikosti elementov z uporabo jQuery v vgrajenem brskalniku
5.3.3.7 Sprememba barve elementov – CSS3 + JS
Pri testiranju smo izločili oba iPhone-a, saj nista bila zmožna animirati barve elementov.
Opaziti je možno, da Samsung Galaxy S5 prednjači pred ostalimi napravami in zmore
izvesti več klicev na requestAnimationFrame.
50
Graf 5.23: Sprememba barve elementov z uporabo CSS3 + JS v vgrajenem brskalniku
5.3.3.8 Sprememba barve elementov – JavaScript
Na Android napravah lahko takoj opazimo za približno 10 % slabšo začetno zmogljivost
prikaza sličic na sekundo kot pri uporabi CSS3 + JS tehnologije.
Graf 5.24: Sprememba barve elementov z uporabo JS v vgrajenem brskalniku
51
5.3.3.9 Sprememba barve elementov – jQuery
Pri teh testih smo bili primorani omejiti maksimalno število generiranih DOM elementov na
300 za iPhone 5c, Xperia Z3 ter Galaxy S5. iPhone 6s Plus ostaja omejen na maksimalno
150 generiranih krogov.
Graf 5.25: Sprememba barve elementov z uporabo jQuery v vgrajenem brskalniku
52
6 SKLEP
V diplomski nalogi smo raziskali tehnologije ki omogočajo različne načine za dosego
animacij na spletu. Preizkusili smo današnje najbolj popularne tehnike z uporabo
aktualnih tehnologij za dosego preprostih animacij na spletu, hkrati pa tudi uspešno
analizirali zmogljivost le-teh.
Pri izdelavi in testiranju smo ugotovili, da je najbolj enostaven način programiranja kljub
izredno slabši odzivnosti in zmogljivosti z uporabo jQuery knjižice. Ker ima ta knjižica tudi
veliko število popravkov za različne brskalnike, je bilo možno poganjati teste, izdelane z
njo na vseh mobilnih napravah brez napak. Pri zmogljivosti same animacije smo ugotovili,
da se testi z majhno prednostjo pred JavaScript-om hitreje končajo. Ugotovili smo, da
kljub večjem številu sličic na sekundo, ki jih zmore brskalnik izvesti s pomočjo CSS3, še
vedno upočasni izvajanje klicev na requestAnimationFrame, na čemer smo utemeljili
teste. Pri striktni uporabi CSS3 animacij smo ugotovili, da je potrebno dodatno poskrbeti
za kompatibilnost z nekaterimi brskalniki in da smo pri dinamičnosti izredno omejeni. Pri
testiranju in uporabi različnih brskalnikov smo ugotovili, da najboljše rezultate z vidika
generiranja sličic na sekundo dosežemo z uporabo vgrajenih brskalnikov, medtem ko
najslabše pri uporabi mobilnega brskalnika Firefox.
Na podlagi informacij, ki smo jih pridobili v diplomskem delu, lahko sklepamo, da je
uporaba CSS3 tehnologije za izdelavo preprostih animacij na DOM elementih ob skrbi za
kompatibilnost s starejšimi brskalniki dovolj učinkovita oz. z vidika zmogljivosti boljša
izbira za dosego ciljev od ostalih rešitev.
53
7 VIRI IN LITERATURA
[1] "Animacija", Sl.wikipedia.org, 2016. [Elektronski]. Dostopno na:
https://sl.wikipedia.org/wiki/Animacija. [1. 9. 2016].
[2] "The evolution of the web", Evolutionoftheweb.com, 2016. [Elektronski]. Dostopno
na: http://www.evolutionoftheweb.com/#/evolution/day. [1. 9. 2016].
[3] "HTML element", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/HTML_element#Images_and_objects. [1. 9. 2016].
[4] "GIF", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/GIF#Animated_GIF. [2. 9. 2016].
[5] "Adobe Shockwave", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/Adobe_Shockwave. [2. 9. 2016].
[6] "Adobe Flash", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/Adobe_Flash. [2. 9. 2016].
[7] "Adobe Animate", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/Adobe_Animate. [3. 9. 2016].
[8] "Java (programming language)", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/Java_(programming_language). [4. 9. 2016].
[9] "Cascading Style Sheets", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/Cascading_Style_Sheets. [4. 9. 2016].
[10] "JavaScript", Sl.wikipedia.org, 2016. [Elektronski]. Dostopno na:
https://sl.wikipedia.org/wiki/JavaScript. [4. 9. 2016].
[11] "JavaScript", Wikipedia, 2016. [Elektronski]. Dostopno na:
https://en.wikipedia.org/wiki/JavaScript. [5. 9. 2016].
[12] "Canvas API", Mozilla Developer Network, 2016. [Elektronski]. Dostopno na:
https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API. [5. 9. 2016].
[13] "HTML5 Canvas", W3schools.com, 2016. [Elektronski]. Dostopno na:
http://www.w3schools.com/html/html5_canvas.asp. [5. 9. 2016].
[14] "WebGL", Mozilla Developer Network, 2016. [Elektronski]. Dostopno na:
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API. [5. 9. 2016].
[15] "WebGL", Wikipedia, 2016. [Elektronski]. Dostopno na:
54
https://en.wikipedia.org/wiki/WebGL. [6. 9. 2016].
[16] "Getting started with WebGL", Mozilla Developer Network, 2016. [Elektronski].
Dostopno na: https://developer.mozilla.org/en-
US/docs/Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL. [6. 9. 2016].
[17] "Responsive Web Design Viewport", W3schools.com, 2016. [Elektronski].
Dostopno na: http://www.w3schools.com/css/css_rwd_viewport.asp. [6. 9. 2016].
[18] "Effectively measuring browser framerate using CSS", Kaizou.org, 2016.
[Elektronski]. Dostopno na: http://www.kaizou.org/2011/06/effectively-measuring-
browser-framerate-using-css. [6. 9. 2016].
[19] "☆ sweep.js ☆", Rileyjshaw.com, 2016. [Elektronski]. Dostopno na:
http://rileyjshaw.com/sweep. [5. 9. 2016].