Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [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
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


I tak i nie. Ogólnie, to robi się wtedy trochę bałaganu w kodzie, a co za problem pobawić się z 1 plikiem całego layoutu i ustawić background position? (IMG:style_emoticons/default/snitch.gif) Zresztą ja czasami jak siędzę na modemie gsm, to wyłączam wczytywanie obrazków, ale style zostawiam. W twoim wypadku niepotrzebnie pobiorę obrazek.

Nie wiem skąd wziąłeś 3-4% ale to jest 1/3 czyli 33% około. Nie każdy serwer obsługuje kompresję gzip.
Cytat
Base64-encoded data URIs are 1/3 larger in size than their binary equivalent. (However, this overhead is reduced to 2-3% if the HTTP server compresses the response using gzip)[6]


- Dalej, IE8 ogranicza wielkość tego ciągu do 32kb... :[
- Słabe cachowanie elementów.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #3





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

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


Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
robi się wtedy trochę bałaganu w kodzie

Wg mnie nie, wystarczy napisać parser który zamieni uri w backgrund-image na content w base64 i odwrotnie, taka prekompilacja (IMG:style_emoticons/default/smile.gif) Sekunda roboty i żaden bałagan.

Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
a co za problem pobawić się z 1 plikiem całego layoutu i ustawić background position?

Nie.
Najlepszy stosunek wielkości do jakości uzyskuje się w różnych formatach (PNG, GIF, JPEG) w zależności od własności danej grafiki.
Nie wspomne już o półprzeźroczystych PNG.
Takie rozwiązanie się nie nadaje kompletnie i musisz tutaj przyznać się do nie przemyślenia do końca tego co napisałeś..

Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
Zresztą ja czasami jak siędzę na modemie gsm, to wyłączam wczytywanie obrazków, ale style zostawiam. W twoim wypadku niepotrzebnie pobiorę obrazek.

Z punktu widzenia usera -> Fail
Z punktu widzenia developera -> WIN :-]

Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
Nie wiem skąd wziąłeś 3-4% ale to jest 1/3 czyli 33% około. Nie każdy serwer obsługuje kompresję gzip.
Cytat

Base64-encoded data URIs are 1/3 larger in size than their binary equivalent. (However, this overhead is reduced to 2-3% if the HTTP server compresses the response using gzip)[6]


Sam sobie odpowiedziałeś, więc przemilcze :-]

Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
- Dalej, IE8 ogranicza wielkość tego ciągu do 32kb... :[

Dobrze wiedzieć, mnie to nie odstarsza.
Mam tylko nadzieje, ze inne przeglądarki nie ograniczają tego jeszcze bardziej..
Na upartego można złożyć z kilku obrazków tworząc wzorcowy pomnik ludzkiego szaleństwa :-]
Tak czy inaczej, to jest bez wątpienia największy minus.

Cytat(bim2 @ 26.05.2011, 02:22:55 ) *
- Słabe cachowanie elementów.

Co przez to rozumiesz?
Wg mnie cachowanie jest bardzo dobre.

Ten post edytował wNogachSpisz 26.05.2011, 03:16:16
Go to the top of the page
+Quote Post
bim2
post
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat
Z punktu widzenia usera -> Fail
Z punktu widzenia developera -> WIN :-]

To przekreśla całość, bo developer nie może być wygrany skoro strona na którą wchodzi użytkownik źle się wyświetli w jakimś tam przypadku.
Cytat
Co przez to rozumiesz?
Wg mnie cachowanie jest bardzo dobre.

Zmiana jednego stylu, np dodanie podkreślenia powoduje że cały ten plik musi pobrać od nowa użytkownik.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #5





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

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


Cytat(bim2 @ 26.05.2011, 07:14:57 ) *
To przekreśla całość, bo developer nie może być wygrany skoro strona na którą wchodzi użytkownik źle się wyświetli w jakimś tam przypadku.

To Twoje zdanie, wg. mnie jest odwrotnie.
To jedna z największych zalet oamawianej techniki.

Cytat(bim2 @ 26.05.2011, 07:14:57 ) *
Zmiana jednego stylu, np dodanie podkreślenia powoduje że cały ten plik musi pobrać od nowa użytkownik.

A kto powiedzial że musisz wszystko trzymać w jednym pliku .css ?
Go to the top of the page
+Quote Post
bim2
post
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat
A kto powiedzial że musisz wszystko trzymać w jednym pliku .css ?

Więc jaki jest wtedy tego sens?
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #7





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

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


Cytat(bim2 @ 26.05.2011, 14:52:01 ) *
Więc jaki jest wtedy tego sens?

Nie rozumiem pytania.
Sens nie ulega zmianie.
Zamiast jednego pliku, trzymasz to w kilku, różnica będzie niewielka.

Ten post edytował wNogachSpisz 28.05.2011, 11:11:30
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Sens nie ulega zmianie.
Zamiast jednego pliku, trzymasz to w kilku, różnica będzie niewielka.

Podstawy protokołu TCP/IP się kłaniają. Nie każdy serwer ma odpowiednio ustawiony Keep-Alive, a pamiętaj, że każde nowe połączenie TCP, to zasoby CPU + łącze. Sama negocjacja potrafi pożreć więcej czasu niż faktyczny przesył zbioru.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #9





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

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


Cytat(erix @ 28.05.2011, 14:12:15 ) *
Podstawy protokołu TCP/IP się kłaniają. Nie każdy serwer ma odpowiednio ustawiony Keep-Alive,

Nie rozumiem co ma keep-alive do ilości plików stylów.

Cytat(erix @ 28.05.2011, 14:12:15 ) *
pamiętaj, że każde nowe połączenie TCP, to zasoby CPU + łącze. Sama negocjacja potrafi pożreć więcej czasu niż faktyczny przesył zbioru.

Dokładnie! Taki jest właśnie cel tej całej zabawy, minimalizacja tych połączeń.
Zamiast wielu drobnych elementów graficznych, jeden - lub jeśli trzeba więcej - plików .css.
Dziękuje za czytanie ze zrozumieniem... (ironia)

Ten post edytował wNogachSpisz 28.05.2011, 15:21:15
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nie rozumiem co ma keep-alive do ilości plików stylów.

Ma. Bo jeśli Keep-Alive jest odpowiednio skonfigurowane, to wszystko poleci jednym połączeniem.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #11





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

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


Cytat(erix @ 28.05.2011, 16:44:49 ) *
Ma. Bo jeśli Keep-Alive jest odpowiednio skonfigurowane, to wszystko poleci jednym połączeniem.

Nadal nie rozumiem, co to ma do rzeczy.
Piszesz nie na temat.

Ten post edytował wNogachSpisz 28.05.2011, 18:25:43
Go to the top of the page
+Quote Post
konole
post
Post #12





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 21.03.2006
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Ta technika nazywa się spritem i jest o wiele wygodniejsza i łatwiejsza w implementacji niż twój sposób ...
Go to the top of the page
+Quote Post
by_ikar
post
Post #13





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(konole @ 29.05.2011, 10:10:14 ) *
Ta technika nazywa się spritem i jest o wiele wygodniejsza i łatwiejsza w implementacji niż twój sposób ...


CSS Spirites, i jest aktualnie na modzie, redukuje liczbę połączeń oraz nie trzeba pisać dodatkowych skryptów które nam parsują plik css żeby zmienić url na data:base64.. Wyżej wymieniony sposób nie przemawia do mnie, jak i pewnie do 90% developerów. Widziałem niekiedy w js jak ktoś wrzucał w taki sposób obrazki i odlanezienie ewentualna korekta obrazka osoby która nie napisała dany arkusz styli, jest masakrą, równie dobrze możemy zacząć programować malbolge, i szczerze współczuje każdemu kto będzie próbował w ten sposób pisać style..
Go to the top of the page
+Quote Post
konole
post
Post #14





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 21.03.2006
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Właśnie, największym problemem będzie aktualizacja sprite'a. A co, jeśli zechcesz dodać jeden obrazek do tego? Więcej problemów niż korzyści.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #15





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

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


Cytat(by_ikar @ 29.05.2011, 18:59:28 ) *
CSS Spirites, i jest aktualnie na modzie, redukuje liczbę połączeń oraz nie trzeba pisać dodatkowych skryptów które nam parsują plik css żeby zmienić url na data:base64..

Piszesz bzdury, zamiana URL na dane binarne zakodowane w base64 jest o galaktykę prostrza niż tworzenie spritów. Dosłownie kilku linijkowy skrypt w PHP wystarczy.
Sprity się nie nadają ze względu na różnorodność formatów i wymiarów obrazków. Nie da się ich efektywnie kompresować
Nie przemawia? Bardzo dobrze, przecież wszyscy na raz nie mogą być innowacyjni (IMG:style_emoticons/default/biggrin.gif)

Jak narazie jedyna rzecz ktróra mnie zmartwiła, to 32KB limit wielkości grafiki - cholerny Internet Explorer (IMG:style_emoticons/default/sad.gif)

Ten post edytował wNogachSpisz 29.05.2011, 23:33:39
Go to the top of the page
+Quote Post
Crozin
post
Post #16





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Sprity się nie nadają ze względu na różnorodność formatów i wymiarów obrazków. Nie da się ich efektywnie kompresować
Jaka różnorodność formatów? Przecież na chwilę obecną wykorzystuje się praktycznie wyłącznie PNG. Co więcej da się to bardzo dobrze skompresować - przecież możesz sobie stworzyć kilka takich map w których znajdą się odpowiednie obrazy. Dzięki temu z jednej uda Ci się pozbyć kanału alpha, z drugiej jakiegoś tam zakresu barw itd. - wątpię by udało Ci się uzyskać lepszy stopień kompresji.
Co do łatwości edycji... CSS Sprites używa się raczej tam gdzie wydajność ma kluczowe znaczenie co z definicji oznacza, że nie może to być zbyt wygodne.

Co więcej:
- brak możliwości jakiegokolwiek indywidualnego zarządzania cachem - jest się skazanym na ustawienia dla arkusza - to może być w pewnych sytuacjach nieco problematyczne,
- brak cache'owania przez pośredniczące serwery - niestety samemu czasami muszę włączyć sobie Operę Turbo by móc w miarę humanitarnie korzystać z Internetu i bardzo irytowałby mnie jeżeli nie mógłbym z tego skorzystać.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #17





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

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


Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
Jaka różnorodność formatów?

JPEG, PNG, PNG-semi-transparent, GIF

Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
Przecież na chwilę obecną wykorzystuje się praktycznie wyłącznie PNG.

A JPEG?

Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
Co więcej da się to bardzo dobrze skompresować

Nie da się, a już na pewno nie da się tego zrobić BARDZO dobrze.

Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
- przecież możesz sobie stworzyć kilka takich map w których znajdą się odpowiednie obrazy.

Tak, pod warunkiem ze każdy składowy obrazek nie będzie miał więcej kolorów niż inny oraz będzie miał taką samą szerokość (lub w ostateczności wyskości, tyle że wtedy modyfikacja spritu to koszmar). W praktyce bardzo mocno ogranicza to sytuacjie w którym można efektywnie wykorzystać tę technikę.

Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
- brak możliwości jakiegokolwiek indywidualnego zarządzania cachem - jest się skazanym na ustawienia dla arkusza - to może być w pewnych sytuacjach nieco problematyczne,

Możesz dowolnie zarządzać cachem zarówno przez htaccess jak i nagłówki HTTP np. wygenerowane przez skrypt php.

Cytat(Crozin @ 30.05.2011, 01:02:09 ) *
- brak cache'owania przez pośredniczące serwery

Od kiedy to proxy nie cachują CSS? Co za bzdury wygadujesz??

Ten post edytował wNogachSpisz 30.05.2011, 11:41:08
Go to the top of the page
+Quote Post
Crozin
post
Post #18





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. O ile GIF-ów się jeszcze używa o tyle JPEG-ki do tworzenia interfejsu? To chyba jakieś nieporozumienie. A to właśnie interfejsy się robi w CSS-ie.
2. Czemu niby jeden duży obraz, zawierający w sobie jedynie powiedzmy tylko odcienie szarości nie miałby się dać ładnie skompresować?
3. Nie widzę też powodu dla którego poszczególne obrazy w takiej mapie miałby mieć takie same wymiary - nie jest to konieczne do utworzenia takiej mapy. Oczywiście stała szerokość i wysokość nieco uprościłaby używanie jej. Zresztą zawsze można sobie taką mapę podzielić na siatkę o stałej szerokości - puste białe, prostokątne przestrzenie bardzo ładnie się kompresują więc nie będzie to problemem.
4. Masz rację co do tego, że takie mapy edytuje się niezbyt przyjemnie, ale taka jest ich cena. Cena za to, że pozbywamy się całej masy niepotrzebnych informacji (nagłówków z formatu PNG czy innego) które w każdej innej technice (włącznie z zapisywaniem obrazów w arkuszu) muszą być powielone dla każdego pliku.
5.
  1. body {
  2. background-image: url(...);
  3. }
  4.  
  5. #sth {
  6. background-image: url(...);
  7. }
Jakim sposobem chciałbyś ustawić osobny nagłówek dla tła z body i #sth?
6. Co do tych proxy źle się wyraziłem. Oczywiście arkusze CSS zostaną poddane kompresji, ale obrazy w nich zawarte nie będą mogły być poddane kompresji stratnej - a to właśnie ona daje największego kopa.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #19





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

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


Cytat(Crozin @ 30.05.2011, 13:07:36 ) *
1. O ile GIF-ów się jeszcze używa o tyle JPEG-ki do tworzenia interfejsu? To chyba jakieś nieporozumienie. A to właśnie interfejsy się robi w CSS-ie.

Tak, JPEGi do interfejsów.

Cytat(Crozin @ 30.05.2011, 13:07:36 ) *
2. Czemu niby jeden duży obraz, zawierający w sobie jedynie powiedzmy tylko odcienie szarości nie miałby się dać ładnie skompresować?

Nie rozumiem pytania.

Cytat(Crozin @ 30.05.2011, 13:07:36 ) *
3. Nie widzę też powodu dla którego poszczególne obrazy w takiej mapie miałby mieć takie same wymiary - nie jest to konieczne do utworzenia takiej mapy. Oczywiście stała szerokość i wysokość nieco uprościłaby używanie jej. Zresztą zawsze można sobie taką mapę podzielić na siatkę o stałej szerokości - puste białe, prostokątne przestrzenie bardzo ładnie się kompresują więc nie będzie to problemem.

Nie ma to jak puste białe przestrzenie....

Cytat(Crozin @ 30.05.2011, 13:07:36 ) *
Jakim sposobem chciałbyś ustawić osobny nagłówek dla tła z body i #sth?

Nie rozumiem pytania.

Cytat(Crozin @ 30.05.2011, 13:07:36 ) *
Co do tych proxy źle się wyraziłem. Oczywiście arkusze CSS zostaną poddane kompresji, ale obrazy w nich zawarte nie będą mogły być poddane kompresji stratnej - a to właśnie ona daje największego kopa.

Ale kiedy ja nie chce żeby grafika mojego layoutu była kompresowana. Jako developer chce żeby moja strona wyglądała zawsze tak samo. Zysk na "zniszczeniu" grafiki przez wątpliwej jakości algorytm kopresujący nie będzie "kopem", przeciwnie, pracą na marne, w rezultacie jedna różnica to popsuty wygląd strony.
Go to the top of the page
+Quote Post
Crozin
post
Post #20





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Wybacz ale jeżeli najpierw rzucasz jakieś hasła, a potem przy naszym dopytywaniu się czy ich negowaniu piszesz, że nie rozumiesz czegoś, albo zarzucasz że ktoś pisze nie na temat (patrz posty @erix). Nie rozumiesz chyba na czym polega kompresja stratna i co niesie ona ze sobą. W dodatku jeszcze nigdzie nie podałeś żadnego uargumentowania, testów czy czegokolwiek konkretnego przy swoich opiniach.

Odnoszę wrażenie że czego by się tu nie podało i tak będziesz na upartego wszystko negował - nawet nie rozumiejąc co się do Ciebie pisze.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.08.2025 - 20:14