Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CSS] background: url(data:image/ ...., czyli odejście od obrazków
wNogachSpisz
post
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Ostatnio eksperymentuje z nowym (nowym dla mnie) podejściem do elementów graficznych layoutu strony.
Obrazki przechowuje w plikach .css w stylach background: url(data:image/png;base64,iVBORw0KGgo......)
zakodowane w base64..

Plusy:
- łatwiejsze grupowanie, znika potrzeba tworzenia map obrazków, nie pamiętam jak ta technika się nazwała, chodzi o to, że kiedy mamy wiele obrazków o małej wielkości, to celem unikniecia wielu połączeń z serweram, tworzymy jeden obrazek zawierający wszystkie mniejsze jeden obok drugiego, a potem przy pomocy stylu CSS background-position osadzamy je w dokumecie. Trzymając je w plikach .css ten problem znika
- omijamy algorytmy kompresujące na serwerach proxy, może to problem dotyczący niewielkiej ilości odwiedzających, ale z doświadczenia wiem, że np. sieci komórkowe obligatoryjnie kompresują wszystkie jpegi, przez co strona wygląda okropnie. Ten problem z pewnością będzie narastał w przyszłości.
- łatwiejsze zarządzenie cachowaniem HTTP,
- mniejsza ilość połączeń do serwera - oszczędność transferu
- szybsze ładowanie strony, mniej elementów do pobrania czy sprawdzenia aktualności cachu..

Minusy:
- 3-4% narzut wielkości (base64) - częściowo rekompensowany zmniejszoną ilością połączeń
- rozwiązanie mało konwencjonalne, przez co prawdopodobnie, gdzieś tam w świecie, jest platforma która tego nie wspiera (może jakieś urządzenie mobilne?)
- i jeszcze raz technika mało konwencjonalna, więc potencjalnie gorzej zoptymalizowana w przeglądarkach, przez co wolniejsza

Warto nie przekraczać granic absurdu, nie ma sensu galerii zdjęć ładować do plików .css
Jednak moim zdaniem jest to jest dobre miejsce dla wszystkich elementów graficznych podstawowego layoutu strony.


A jakie jest Wasze zdanie?

Ten post edytował wNogachSpisz 26.05.2011, 00:07:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Cytat
JPEG, PNG, PNG-semi-transparent, GIF
Zapomniałeś jeszcze o bmp i kilku innych, które obsługują przeglądarki (jak choćby animowany png). Ale mam wrażenie, że "nie rozumiem pytania" dla wielu osób świadczy nie o tym, że tego nie rozumiesz, ale że nie chcesz zrozumieć. Gdyby było inaczej samodzielnie byś potrafił podejść do problemu i stwierdzenia danej osoby. Inna sprawa, że w wielu przypadkach z gifa można na rzecz png zrezygnować i jest on mniejszy. No ale do tego trzeba nieco wiedzieć o optymalizacji grafiki, której to wiedzy najprawdopodobniej Ci nieco brakuje. Dlatego ostatecznie do wyboru masz tylko png, jpg i czasem gif dla animacji oraz kwestia zastanowienia co będzie w danej sytuacji lepszym rozwiązaniem.

Przykładem tego jest poprawianie czegoś, co w efekcie i tak wychodzi na to samo lub gorsze w efekcie. Z jednej strony postulujesz swoje rozwiązanie jako mające redukować liczbę połączeń do serwisu, a już kilka postów gdy wytyka Ci się wady rozwiązania piszesz, że uniknąć tego można... zwiększając liczbę odwołań do serwera poprzez podział na kilka plików css. Tak. Super rozwiązanie, które prowadzi do punktu wyjścia (IMG:style_emoticons/default/wink.gif) Tyle że zamiast iluś obrazków masz ileś plików css z zakodowanymi danymi jako base64. Pewne dane choćby nie wiem co robić są już niezwykle trudne do kompresji i zużywanie pamięci lub czasu procesora na próbę tego jest zwyczajną głupotą. Dlatego kompresji poddaje się jedynie pliki tekstowe, ale już grafikę nie. I dla testów weź sobie plik jpg zobacz ile ma, a potem zrób z niego base64 i spróbuj gzipować (bo tak zrobi serwis przy próbie wysyłki css) oraz porównaj rozmiary, a zobaczysz bezsens swojego rozwiązania. Każdy czytający ten temat od początku dojdzie do tego co właśnie napisałem i stwierdzi, że sam się pogubiłeś w tym co piszesz już. Użycie sprite'ów jest znacznie wygodniejsze, a to co Ty proponujesz (base64) używane jest jedynie w przypadku niewielkich grafik, ale dla czegoś co ma być już zastępstwem dla sprite'ów jest po prostu marnotrastwem łącza i mocy serwera. Zamiast bowiem zaserwować od razu dane jako sprite i właściwy css, które to mogą iść jako osobne połączenia niezależnie, walisz kilka plików CSS w najgorszym wypadku, a CSS są przetwarzane kaskadowo i na serwerze jeszcze będą gzipowane a po stronie usera dekompresowane, przetwarzane i dopiero wyświetlane. Nie tylko masz gorsze parametry od zrobionego z głową sprite'a, ale jeszcze serwer i klienta zmuszasz do dodatkowej pracy. Świetne rozwiązanie - nie ma co, gratuluję (IMG:style_emoticons/default/wink.gif)

Od tego co piszesz (redukcja liczby połączeń) są właśnie sprite'y. To user decyduje czy chce wyświetlać grafikę i ściągać cokolwiek. Ty go chcesz uszczęśliwiać na siłę. Pakujesz mu obrazki poprzez CSS, choć wyraźnie on chce je zablokować. Kosztem przykładowo sprite'a z plikami, każesz mu pobierać znacznie większe niż normalnie pliki CSS. I tutaj kompresja niewiele zmieni. Wcale nie rozumiesz algorytmów kompresji i to jest luka w Twoim rozumowaniu. Sprite'y mają w zasadzie jedno ograniczenie poważne - nie mogą zawierać animacji. Ale widziałem już przykłady, że poprzez odpowiednie zabawy z nimi i JS można zasymulować ją. Ja wolę nie wiedzieć ile miałby css z animowanymi gifami przejechanymi base64, który musiałby user pobierać czy chce czy nie.

Konole... Jaki problem z aktualizacją sprite'a? Sensownie przemyślany sprite podczas aktualizacji będzie wymagał jedynie niewielkiej modyfikacji grafiki i dodania jej parametrów do css, bez ruszania czegokolwiek w starych danych. Nie mówię o sytuacjach nawet gdy zmieniasz layout i cała zabawa to... podmiana linku do innego sprite'a, bez ruszania pozostałej części css (co nieraz się praktykuje). Ale do tego faktycznie trzeba rozumieć jak powstają sprite'y. Gdy to załapiesz, obserwując choćby kod wynikowy generatorów, to samodzielne tworzenie do nich css staje się banalne. Summa sumarum nawet utworzenie css do pliku z kilkudziesięcioma małymi elementami będzie mniej obciążające i zajmie mniej zasobów niż Twoje rozwiązanie, a dodatkowo będzie nieco elastyczniejsze przy aktualizacjach. Wystarczy trzymać się tylko kilku zasad prostych

Cytat
A JPEG? (...) Tak, JPEGi do interfejsów.
A o artefaktach jpeg słyszał i wie dlaczego ich stosowanie jest czasem strzałem w stopę? Aż mi się wspomniała jedna graficzka (całkiem inteligentna kobieta), która podesłała mi puzzle pocięte i rozrzucone na białym tle... ale skompresowane do pliku jpg, co jest w takiej sytuacji głupotą, bo artefakty kompresji sprawiły, że nie mogłem tych puzzli ułożyć bez problemów.

Cytat
Nie da się, a już na pewno nie da się tego zrobić BARDZO dobrze.
I tutaj kłaniają się znajomości grafiki oraz algorytmów kompresji. Kto je nieco ogarnia zredukuje parę rzeczy w grafice i tym samym poprawić może znacząco współczynnik kompresji przy niezauważalnej utracie jakości lub nawet bez utraty choćby bita danych. To co uważasz za świetne rozwiązanie w porównaniu z użyta z głową optymalizacją grafiki nawet nie będzie mieć porównania.

Cytat
Nie ma to jak puste białe przestrzenie...
...których wielkość nawet tysięcy pikseli liczona jest w bajtach, a wielkość i tak uzupełniana jest do wielokrotności minimalnej jednostki alokacji dysku, czyli zazwyczaj krotności od 512B do nawet 32(!) kB. Tak, argument po prostu kładący na łopatki (IMG:style_emoticons/default/wink.gif)

Dlatego jeśli już piszesz o jakimś rozwiązaniu to posłuchaj także zdania osób, które oprócz stosowania rozwiązań jakie opisujesz znają się także dobrze na: protokole tcp/ip, algorytmach kompresji, obróbce grafiki w stopniu bardziej zaawansowanym oraz wielu mechanizmów, o których zwyczajny webmaster zwyczajnie nie wie, bo nie ma w tej dziedzinie wiedzy nie tylko teoretycznej, ale i praktycznej. A są tutaj tacy, ale ich spojrzenie na problem i wytykane uchybienia bagatelizujesz, "nie rozumiesz pytań" lub stwierdzasz, że "nie mają związku z tematem" (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- wNogachSpisz   [CSS] background: url(data:image/ ....   25.05.2011, 23:57:23
- - bim2   I tak i nie. Ogólnie, to robi się wtedy trochę bał...   26.05.2011, 01:22:55
- - wNogachSpisz   Cytat(bim2 @ 26.05.2011, 02:22:55 ) r...   26.05.2011, 03:00:22
- - bim2   CytatZ punktu widzenia usera -> Fail Z punktu w...   26.05.2011, 06:14:57
- - wNogachSpisz   Cytat(bim2 @ 26.05.2011, 07:14:57 ) T...   26.05.2011, 11:44:48
- - bim2   CytatA kto powiedzial że musisz wszystko trzymać w...   26.05.2011, 13:52:01
- - wNogachSpisz   Cytat(bim2 @ 26.05.2011, 14:52:01 ) W...   28.05.2011, 11:11:12
- - erix   CytatSens nie ulega zmianie. Zamiast jednego pliku...   28.05.2011, 13:12:15
- - wNogachSpisz   Cytat(erix @ 28.05.2011, 14:12:15 ) P...   28.05.2011, 15:18:31
- - erix   CytatNie rozumiem co ma keep-alive do ilości plikó...   28.05.2011, 15:44:49
- - wNogachSpisz   Cytat(erix @ 28.05.2011, 16:44:49 ) M...   28.05.2011, 18:25:25
- - konole   Ta technika nazywa się spritem i jest o wiele wygo...   29.05.2011, 09:10:14
|- - by_ikar   Cytat(konole @ 29.05.2011, 10:10:14 )...   29.05.2011, 17:59:28
- - konole   Właśnie, największym problemem będzie aktualizacja...   29.05.2011, 19:17:00
- - wNogachSpisz   Cytat(by_ikar @ 29.05.2011, 18:59:28 ...   29.05.2011, 23:29:08
- - Crozin   CytatSprity się nie nadają ze względu na różnorodn...   30.05.2011, 00:02:09
- - wNogachSpisz   Cytat(Crozin @ 30.05.2011, 01:02:09 )...   30.05.2011, 11:40:08
- - Crozin   1. O ile GIF-ów się jeszcze używa o tyle JPEG-ki d...   30.05.2011, 12:07:36
- - wNogachSpisz   Cytat(Crozin @ 30.05.2011, 13:07:36 )...   30.05.2011, 15:13:49
- - Crozin   Wybacz ale jeżeli najpierw rzucasz jakieś hasła, a...   30.05.2011, 19:01:46
- - konole   wNogachSpisz, nie rozumiem ciebie. Chcesz coś prze...   30.05.2011, 19:10:40
- - melkorm   Odnośnie problemów z generowaniem CSS Sprites : Ge...   30.05.2011, 20:04:24
- - thek   CytatJPEG, PNG, PNG-semi-transparent, GIFZapomniał...   30.05.2011, 22:11:45
- - erix   CytatNie ma to jak puste białe przestrzenie.... Sę...   31.05.2011, 16:26:41
- - Crozin   CytatHmm, dlaczego musi być powielone? Ostatnio ob...   31.05.2011, 16:38:11
- - thek   CytatTo nie jest jak w BMP, że każdy piksel musi b...   31.05.2011, 21:09:54
- - erix   CytatBa... Zapomnijmy nawet, że bmp posiada warian...   31.05.2011, 21:58:25
- - thek   CytatEch, nie chodzi mi tu o to, aby się popisywać...   31.05.2011, 23:05:45
- - everth   Odkopię temat. Zastanawiam się nad tytułowym rozwi...   8.08.2011, 20:59:01


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 18:44