Animation z CSS3 spowalnia stronę

0

Nie ważne jak infantylnie brzmi tytuł, nie umiałem lepszego wymyślić, ale problem nie jest trywialny, nawet dosyć ciekawy.

Moja strona działa na darmowym serwerze (wcześniej friko teraz hostinger). Przeniosłem się na hostingera, bo friko dziwne rzeczy robiły przy przesyłaniu czegokolwiek między PHP a JSem, ale to nie jest związane z moim problemem. Dla podejrzenia problemu strona: www.wojciechmoska.hekko.pl

Tła na mojej stronie otwierają się długo mimo dość dużej optymalizacji tych jpgów z mojej strony. Niestety mają szerokość 1920px, więc ciężko było uzyskać wielkości mniejsze niż 150kb. Ale to nie jest powód spowalniania strony, bo jak już się załaduje to jest OK.

Problem jest z CSSowym animation. Jak widać na mojej stronie na tle latają takie białe świetliki, latają z różną prędkoscią i po krzywej, więc animacja jest duża. Na moim komputerze i wielu innych, które sprawdzałem jest w porządku i strona nie ma jakiś zwiech. Ale sprawdzałem też na kilku innych, na których strona się bardzo ścinała i dopiero kliknięcie w "wyłącz animacje" w stopce powodowało uspokojenie się strony. Wyłącz animację najzwyczajniej w świecie w JSie zatrzymuje animację.


html, body { 
    background: url(images/dotbig.png), url(images/dotmedium.png), url(images/dotmedium.png), url(images/dot.png), url(images/dot.png), url(images/background.jpg);
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    height: 100%;
    margin: 0px;
    padding: 0px;
    text-align: center;

    animation: AnimateDots 33s linear infinite;
    animation-play-state: paused;
    -webkit-animation: AnimateDots 33s linear infinite;
    -webkit-animation-play-state: paused;
    z-index: 0;
}



@keyframes AnimateDots{  
 0% {background-position: 40% 40%,    80% 15%,    15% 60%,    50% 120%,    120% 120%, center center;}
20% {background-position: 60% 70%,    60% 30%,    20% 20%,    60% 97%,     90% 90%, center center;}
40% {background-position: 100% 90%,   35% 50%,    25% -20%,   70% 80%,     60% 50%, center center;}
55% {background-position: 120% 120%,  15% 70%,    -20% -20%,  85% 60%,     45% 30%, center center;}
61% {background-position: -20% 120%,  12% 80%,    -20% 120%,  88% 52%,     40% 28%, center center;}
66% {background-position: -20% 0%,    0% 120%,    -20% 120%,  92% 47%,     36% 26%, center center;}
72% {background-position: 0% 0%,      -20% 120%,  -20% 120%,  95% 45%,     25% 25%, center center;}
78% {background-position: 10% 10%,    120% 120%,  0% 120%,    97% 42%,     15% 23%, center center;}
82% {background-position: 20% 20%,    120% -20%,  5% 105%,    98% 36%,     12% 22%, center center;}
85% {background-position: 25% 25%,    110% -5%,   8% 90%,     102% 34%,    8% 22%, center center;}
92% {background-position: 30% 30%,    95% 5%,     10% 76%,    105% 33%,    0% 21%, center center;}
100% {background-position: 40% 40%,   80% 15%,    15% 60%,    120% 30%,    -20% 20%, center center;}
}

//dla webkita to samo

Jak widać animacja zmienia się często. Tło składa się z aż 6 elementów, z czego aż 5 ma zmienianych pozycję co chwilę.

Moje pytania brzmią: Czy macie jakiś pomysł jak zoptymalizować to pozostawiając animację w miarę taką skomplikowaną jaka jest? Czy u Was też są jakieś problemy z szybkością działania strony. Czy np. pozostawienie w tle tylko serio tła, a animowanie kilku elementów img będzie działać lepiej? Czy korzystając z JSowych funkcji albo jQuerowego animate mogłoby to działać szybciej?

Pierwsze moje spostrzeżenie było takie, że działa to wolno może dlatego, że robię animacje na tle, a gdyby to były elementy img to by było szybciej (tak intuicyjnie), ale nie mam jak tego poprzeć, więc poprawcie mnie jak coś.

Temat w ogóle wydaje mi się ciekawy, bo zastanawiam się co by wypadło najlepiej pod względem szybkości działania animacji: CSS3 czy JS.

1

Wydaje mi się, że aż tak bardzo nie powinno przymulać, ale fakt - trochę przymula, szczególnie na Operze 12, gdy procesor mam limitowany do kilku % jego mocy, a Opera12 słabo sobie radzi z renderingiem. Na webkicie raczej śmiga.

Jest szansa, że przesuwając elementy IMG będzie to działać szybciej. Problem nie jest z samą animacją, problem jest z renderingiem tego wszystkiego. Przesuwanie tła widzę, że powoduje repaint CAŁEGO obszaru strony. Wyrzucając te elementy do <img> z position:absolute jest szansa, że to będzie szybsze. W Chrome sobie włącz Narzędzia Deweloperskie, W opcjach w General, w Appearance zaznacz Show 'Rendering' view ..., potem zamknij ustawienia i naciśnij Esc - przełącz na zakładkę 'Rendering' i tam masz opcję do podświetlania obszaru ponownego rysowania.

Jeżeli manipulujesz na tych samych właściwościach (tu: background-position)to CSS3 będzie szybsze niż JS.

Edit: Aha, i jeszcze użyteczne linki [nie czytałem, więc nie wiem czy się odnoszą do problemu, ale wiedza ogólna zawsze się przyda]:
http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/
http://www.paulirish.com/2011/viewing-chromes-paint-cycle/
(gdzieś kiedyś widziałem kilometrowy artykuł na ten temat, niestety nie znalazłem teraz)

A taki offtop - masz niezłą stronkę, jesteś studentem, nie gimnazjalistą - czemu męczysz ją na darmowych hostingach (sam zauważyłeś, że tło się ładuje wolno, pomimo, że ma tylko 150KB, a dzisiejsze "internety" takie ilości przyjmują w ułamek sekundy)? Domena .net - 35zł/rok na OVH, hosting - np. hekko.pl - 44zł/rok --- a odpadają problemy darmowych hostingów, a CAŁOŚĆ wygląda profesjonalnie (na własnej domenie, zamiast jakieś xxxxxx.96.lt), koszt raczej nieduży :)

0

Strona główna już przekształcona na wersję z <img>. Wydaje się być lepiej, kiedy te świetliki są odseparowane od tła.

Niestety nie udało mi się wejść do tego renderingu w Chrome. Albo moja wersja tego nie ma albo ja nie umiem tego znaleźć.

Jeśli kogoś interesuje wygląda to tak:
Przykładowy świetlik:

<img src="images/dotbig.png" id="dot_1" alt="Big Dot" />  

Przykładowa animacja:

#dot_1{
    position: absolute;
    left: 40%; top: 40%;
    animation: AnimateDot1 33s linear infinite;
    -webkit-animation: AnimateDot1 33s linear infinite;   
}

@keyframes AnimateDot1{
    0% {left: 40%; top: 40%;}
    20% {left: 60%; top: 70%;}
    40% {left: 100%; top: 90%;}
    55% {left: 120%; top: 120%;}
    61% {left: -20%; top: 120%;}
    66% {left: -20%; top: 0%;}
    72% {left: 0%; top: 0%;}
    78% {left: 10%; top: 10%;}
    82% {left: 20%; top: 20%;}
    85% {left: 25%; top: 25%;}
    92% {left: 30%; top: 30%;}
    100% {left: 40%; top: 40%;}
}
0

Ma mniej do przerysowania, choć Chrome pokazuje i tak, że większość czasu cały obszar jest przerysowany - generalnie ciut lepiej może chodzić.

Za to przeróbka tego na IMG spowodowała, że:

  • Na Operze 15+ coś nawala z tłem (spowodowane jest to background-color: black dla html, body)
  • Można przescrollować stronę w dół w momencie jak świetlik zaczyna uciekać poza ekran.

Co do Narzędzi Webdev: Albo tutaj albo tutaj masz przycisk konfiguracji. Potem albo to albo to zaznaczasz. W pierwszym przypadku po zamknięciu opcji wciśnij ESC, pojawi się mini-konsola z trzema zakładkami, w ostatniej masz tę same opcje.

Kolejny Off-topic:
Z tym to nie jesteś sprytny, co najwyżej naiwny, bądź [bez urazy] głupi - to jest BLACK SEO i za to dostaniesz bana od Google. Za to na pozycjonowanie doskonale wpłynie zamiana tego na tło + TEKST w html. Stronę buduje się na treści, ale prawdziwej treści oraz takiej, którą boty są w stanie odczytać (nie czytają grafik).
<h1> na tekst "Jeśli strona działa wolno" to marnotrawienie tego tagu i działanie nielogiczne.
A normalna domena i płatny hosting także pomogą w utrzymaniu wyższej pozycji (na darmówkach jest mnóstwo śmieciowych stron, więc wszystkie spychane są niżej).

0

Za to przeróbka tego na IMG spowodowała, że:

  • Na Operze 15+ coś nawala z tłem (spowodowane jest to background-color: black dla html, body)
  • Można przescrollować stronę w dół w momencie jak świetlik zaczyna uciekać poza ekran.

Co do drugiego to sprawdź jak działa po odświeżeniu. Ale może jest coś nie tak. Dałem overflow: hidden, nie wiem czy działa na wszystkie przeglądarki. A ten background postaram się poprawić.

Kolejny Off-topic:
Z tym to nie jesteś sprytny, co najwyżej naiwny, bądź [bez urazy] głupi - to jest BLACK SEO i za to dostaniesz bana od Google.

No okej, nawet nie wiedziałem, że to jest black seo, jakaś "mądra" strona o pozycjonowaniu to pisała i ja głupi uznałem, że tak się robi.

Za to na pozycjonowanie doskonale wpłynie zamiana tego na tło + TEKST w html. Stronę buduje się na treści, ale prawdziwej treści oraz takiej, którą boty są w stanie odczytać (nie czytają grafik).

W stronie, którą robiłem po tej już się stosowałem do tej zasady. Tutaj jeszcze nie zdążyłem tego przekształcić (bo teraz od kilku dni ją zmieniam na to czego się nauczyłem od ostatniego czasu). Strona już działała parę miesięcy temu, ale wtedy kompletnie zaczynałem. Teraz staram się wprowadzać to co od czego czasu poznałem/nauczyłem się).

<h1> na tekst "Jeśli strona działa wolno" to marnotrawienie tego tagu i działanie nielogiczne.

Okej, poprawię.

A tak uprzedzając, formularz nie ma walidacji bo był zrobiony wczoraj. W ogóle strona jest mimo wszystko w trakcie tworzenia, modyfikacji, dlatego między innymi napisałem tutaj. Błędy które mi wskazałeś postaram się naprawić.

EDIT:
Zmieniłem to h1 na p, usunąłem te ukryte nagłówki. I zauważyłem coś co jeśli dobrze wnioskuje jest jednoznacznym powodem do zakupu jakiegoś konkretnego hostingu. Mianowicie prawdopodobnie trochę osób z 4programmers weszło na moją stronę i serwer nie wytrzymał, bo około 19 nie potrafiłem na nią wejść, były jakieś komunikaty o błędzie. A nie wierzę, że weszło mi 1000 osób na strone. Pewnie kilkanaście/kilkadziesiąt max i strona już padła. Chyba, że powód był jakiś inny.

Co do Renderingu, udało mi się już to uruchomić, dzięki. Z tego co zauważyłem to te obramowanie wskazuje po prostu prostokąt, w obrębie którego znajdują się wszystkie świetliki a nie całą stronę. Ale może źle rozumiem to narzędzie. Tak czy inaczej przydatne, będę częściej korzystał.

Jeśli byś miał chwilkę czasu to spróbuj wejść na tą Operę i kliknąć "Odśwież". Bo mi taka sytuacja jak mówisz się robiła właśnie jak nie odświeżyłem strony. Nie wiem czy to ma coś wspólnego z pamięcią podręczną czy nie, ale tak mi to pasuje. Jak dalej tak będziesz miał to się bede zastanawiał co jest źle. Sprawdzałem na Operze 18, Chromie 31, Firefoxie 26, IE11 i jest w porządku.

0
Mossar napisał(a):

Co do drugiego to sprawdź jak działa po odświeżeniu. Ale może jest coś nie tak. Dałem overflow: hidden, nie wiem czy działa na wszystkie przeglądarki. A ten background postaram się poprawić.

Błąd po mojej stronie - rozszerzenie do przeglądarki. Psuje tylko dwie strony - Twoją i wallbase.cc

No okej, nawet nie wiedziałem, że to jest black seo, jakaś "mądra" strona o pozycjonowaniu to pisała i ja głupi uznałem, że tak się robi.

Uważaj na strony "o pozycjonowaniu" (zazwyczaj i tak zawierają jakieś pseudoporady, po to, żeby była treść, a na dole promowała linki) a tym bardziej "specjalistów seo" oferujących swoje usługi (szczególnie na allegro, w śmiesznie niskich cenach [choć wysoka cena nic nie gwarantuje]) - większość z nich to oszuści, albo po prostu zwykli spamerzy, którzy zaspamują Twoim serwisem sieć (a niektórzy zechcą dokonać poprawek na Twojej stronie, zwykle psując ją - miałem doświadczenia z wieloma takimi, bo klient, któremu robiłem stronę potem zgłaszał mi, że coś nie działa, ja zaglądam, a tam masa dziwnego kodu "pozycjonerskiego" i u jednych nie działa cała wersja angielska strony [!], w innej stopka się rozpada, itd.).
Po prostu stosuj tagi zgodnie z ich przeznaczeniem (h1, h2, h3... do nagłówków, li do list, article i inne z html5 zgodnie z przeznaczeniem) i miej na stronie trochę treści (dostępnej dla przeglądarek) - to więcej jak połowa sukcesu.

Mossar napisał(a):

W stronie, którą robiłem po tej już się stosowałem do tej zasady. Tutaj jeszcze nie zdążyłem tego przekształcić (bo teraz od kilku dni ją zmieniam na to czego się nauczyłem od ostatniego czasu). Strona już działała parę miesięcy temu, ale wtedy kompletnie zaczynałem. Teraz staram się wprowadzać to co od czego czasu poznałem/nauczyłem się).
A tak uprzedzając, formularz nie ma walidacji bo był zrobiony wczoraj. W ogóle strona jest mimo wszystko w trakcie tworzenia, modyfikacji, dlatego między innymi napisałem tutaj. Błędy które mi wskazałeś postaram się naprawić.

Nie testowałem nic dogłębnie, tylko to, co przypadkiem rzuciło się w oczy. Cieszę się, że pomogłem i przyglądam się efektom (bo podoba mi się to, co robisz, a rzadko na 4p widuję linki do prac, które mi się podobają)

Mossar napisał(a):

EDIT:
Zmieniłem to h1 na p, usunąłem te ukryte nagłówki. I zauważyłem coś co jeśli dobrze wnioskuje jest jednoznacznym powodem do zakupu jakiegoś konkretnego hostingu. Mianowicie prawdopodobnie trochę osób z 4programmers weszło na moją stronę i serwer nie wytrzymał, bo około 19 nie potrafiłem na nią wejść, były jakieś komunikaty o błędzie. A nie wierzę, że weszło mi 1000 osób na strone. Pewnie kilkanaście/kilkadziesiąt max i strona już padła. Chyba, że powód był jakiś inny.

W "jakichś komunikatach o błędach" najważniejsze jest, żeby je zapisać ;) Bez tego ciężko dojść co się działo. Na 4p masz 140 wyświetleń tego tematu, unikalnych wejść pewnie - ok 60.

Mossar napisał(a):

Co do Renderingu, udało mi się już to uruchomić, dzięki. Z tego co zauważyłem to te obramowanie wskazuje po prostu prostokąt, w obrębie którego znajdują się wszystkie świetliki a nie całą stronę. Ale może źle rozumiem to narzędzie. Tak czy inaczej przydatne, będę częściej korzystał.

Zaznacza prostokąt, gdzie dokonuje przerysowania. Tych prostokątów może być kilka na stronie (przebadaj sobie to na innych stronach). Tu widać przerysowanie jest dokonywane od najbardziej wysuniętej kropki na lewo i do góry, do najbardziej wysuniętej kropki na prawo i dół. Czyli im kropki wszystkie są bliżej środka - tym mniej do przerysowania. Nie wiem czy można to jakoś usprawnić na tyle, by tylko obszar na którym kropki aktualnie są były przerysowywane. Warto też pamiętać, że algorytm przerysowywania może być inny na innych przeglądarkach.

Mossar napisał(a):

Jeśli byś miał chwilkę czasu to spróbuj wejść na tą Operę i kliknąć "Odśwież". Bo mi taka sytuacja jak mówisz się robiła właśnie jak nie odświeżyłem strony. Nie wiem czy to ma coś wspólnego z pamięcią podręczną czy nie, ale tak mi to pasuje. Jak dalej tak będziesz miał to się bede zastanawiał co jest źle. Sprawdzałem na Operze 18, Chromie 31, Firefoxie 26, IE11 i jest w porządku.

Wyżej napisałem - to był mój błąd. A co do cache przeglądarek - gdy zmieniasz coś na stronie, np. w pliku css, który jest chętnie cachowany przez przeglądarki - w <link /> w którym podpinasz styl, na końcu adresu dopisuj jakiś string po pytajniku, np. jak teraz miałbyś:
/css/style.css
to rób sobie
/css/style.css?v=1
i potem tę jedynkę zwiększaj z każdą wersją.
Dla przeglądarki te dwa adresy to różne pliki, więc na pewno taki plik będzie wczytany od nowa osobom, które mogą mieć scachowaną wersję poprzednią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1