Pentru a evita încetinirea aspectului, este suficient doar să grupați împreună cererile DOM și actualizările DOM:
Pe baza acestui fapt, este posibil să se calculeze un interval ideal de 1000ms / 60 (fps) = 16,7ms
Și ce rezultă din asta?
- setTimeout () și setInterval () nu acordă atenție la ce se mai întâmplă în browser. Pagina pe care apare animația poate fi găsită în fila browser inactiv. Și în timp ce utilizați încă resursele procesorului. În prezent, numai Chrome face un interval de animație de 1fps pe filele ascunse.
- SetTimeout () și setInterval () cer ca pagina să fie redesenată nu atunci când computerul face (și face acest lucru în mod regulat). Aceasta înseamnă că browserul trebuie să sincronizeze animația cu întreaga actualizare a ecranului și, dacă frecvența sa nu este sincronizată cu actualizarea întregului ecran, poate necesita mai multă putere de procesare. Și aceasta este utilizarea CPU-ului, consumul de baterii al dispozitivului mobil și animația twitchy.
- Cea mai mare problemă apare când trebuie să animați mai multe elemente simultan. Puteți încerca să sincronizați toate acestea, dar acest lucru va deveni un alt coșmar în cazul unei animații diverse care are loc simultan.
În schimb, dezvoltatorii Mozilla au sugerat utilizarea funcției requestAnimationFrame (RAF), care nu necesită procesarea semnificativă a codului existent. Puteți compara implementarea de bază a RAF și setInterval:
RAF are un impact maxim posibil asupra performanței animației, ceea ce se poate face schimbând doar un singur loc în cod. RAF grupează toate animațiile într-un singur revopsire bazată pe browser. Acest lucru economisește resursele CPU și permite dispozitivului să fie mai rapid și să trăiască mai mult.
Dacă utilizați requestAnimationFrame, toate animațiile sunt netede si frumoase, sincronizate cu procesorul grafic (GPU) și mănâncă mult mai puține resurse CPU (CPU).
CSS tranziții
Tranzițiile CSS au depășit viteza jQuery datorită transferului logicii de animație direct în motorul browser-ului, care este eficient în următoarele cazuri:
- Optimizarea interacțiunii DOM și a consumului de memorie pentru evitarea deranjării în browser
- Îmbunătățiri în algoritmii RAF
- Utilizarea accelerației hardware (folosind puterea GPU pentru a îmbunătăți performanța animației)
Putem spune deja în siguranță că:
Pentru a compara performanța bibliotecilor populare de animație, inclusiv Transit, care utilizează tranziții CSS, mergeți la documentația Velocity.
- Sincronizarea DOM cu stivă
- Caching valorile proprietăților pentru a minimiza interogările DOM (aceasta este cea mai mare problemă în performanța animației DOM)
- Cachearea unităților de măsură convertite (de exemplu, px în%, em etc.) prin intermediul elementelor interconectate într-un singur apel
- Omiteți actualizările de stil atunci când nu aveți nevoie de actualizări vizuale.
Velocity.js folosește cele mai bune metode pentru cachearea valorilor finale ale animației pentru reutilizare, ca fiind următoarele valori de pornire pentru următoarea animație - evitând astfel relocarea DOM:
În acest exemplu, Velocity știe deja că al doilea apel ar trebui să înceapă cu opacitate: 1 opacitate și o valoare maximă de 50%.
În cele din urmă, să comparăm două biblioteci - Velocity. Js și GSAP
- GSAP - rapid, cu caracteristici extraordinare ale platformei de animație. Velocitatea este un instrument simplu pentru îmbunătățirea dramatică a performanțelor animațiilor și fluxurilor de lucru ale UI
- GSAP este o bibliotecă comercială. costă o anumită sumă de bani. Velocity este o bibliotecă open-source cu licență de la MIT.
- În ceea ce privește performanța, Velocity. Js și GSAP nu se disting în proiectele reale.
Astfel, GSAP trebuie utilizat atunci când nevoia detaliat de control asupra timpului de execuție (n-p, remaparea, pauză / reluare / caută), mișcarea (de exemplu, curbe Bezier) sau grup complex. Aceste caracteristici sunt critice în dezvoltarea de jocuri și unele aplicații de nișă, dar acestea sunt mai puțin frecvente în aplicații web, dezvoltarea de site-uri.
Velocity.js
Ceea ce am dat o mulțime de timp GSAP nu înseamnă că despre caracteristici de viteză nu va fi descrisă. Dimpotrivă. Codul 7kb comprimat, viteza nu numai repetă întreaga .animate funtsionalnost $ () în jQuery, dar, de asemenea, completează pe partea de animație, transformare, rotație, finețea și derularea.
Viteza este mai bună decât combinațiile jQuery, jQuery UI și CSS.
Folosește metoda jQuery - $ .queue () și astfel interacționează cu ușurință cu funcțiile $ .animate (), $ .fade () și $ .delay jQuery. De asemenea, sintaxa Velocity este similară cu $ .animate () și nu trebuie schimbat un element al codului din pagină.
Să luăm în considerare Velocity.js pe un exemplu
În Velocity, pot fi create scenarii complexe de derulare cu animație 3D cu două linii simple de cod:
Scopul Velocity este de a rămâne un lider în animația și confortul performanței.
Alexey este un programator foarte experimentat și o persoană bună. Întotdeauna face totul la timp, și uneori mai rapid decât promisiunile. Calitatea muncii este de 5 din 5. Deseori oferă o alternativă sau o opțiune mai bună. Ceea ce este FOARTE IMPORTANT este mereu la apel (aproape non-stop). Întotdeauna atent la lucruri mici, care nu este adesea găsit în dezvoltatori. Responsabil. Prețuri normale. În general, unele emoții pozitive din procesul de lucru și rezultate. Alexey, mulțumesc pentru munca de calitate făcută! Vă recomand.
Maxim Ivanov, directorul magazinului de îmbrăcăminte pentru tineri ACIDWEAR.ru