Base64 kodiranje za slike
3 naročniki
3 naročniki
Na netu sem našel nekaj tutorialov, ki priporočajo base64 kodiranje za slike. Tako namesto direktne povezave za prikaz slike uporabimo kodirano povezavo (če si prav interpretiram).
En tak tutorial sem našel tukaj:
http://www.9lessons.info/2010/11/base64-encoding-for-images.html
Koda je takšna:
<?php
$img_src = "image/sample.png";
$imgbinary = fread(fopen($img_src, "r"), filesize($img_src));
$img_str = base64_encode($imgbinary);
echo '<img src="data:image/jpg;base64,'.$img_str.'" />';
?>
Če jaz prav razumem Google to priporoča zato, da ni toliko zahtevkov za strani, kjer se recimo prikaže ogromno število slik.
Ampak kljub temu, če želimo prikazovati zakodirano povezavo do slike, jo mora strežnik najprej prebrati in šele na to servirati zakodirano verzijo. In potem tu glede obremenitve nismo dosegli nič. Seveda imam v mislih dinamične strani in ne statične.
5 odgovorov
Ni povezava zakodirana, temveč je v HTML kar vsebina slike, enkodirana z base64, zato da nimaš v HTML datoteki binary znakov. Rezultat je en request manj (ker vsebina pride v HTMLju) in za 33% prometa več (ker je vsebina v base64).
Rezultat je en request manj (ker vsebina pride v HTMLju)
Ampak ali ne že preko te vrstice prek PHP-ja izvršimo zahtevek ali je to drugače?
$img_src = "image/sample.png";
Hvala za odgovor!
Zgeneriral testni primer in poglej izvorno kodo v brskalniku in videl boš o čem ti govorijo. In ne, ne šteje se requeste v php-ju ampak v htmlju...
Lucifix:
Ampak ali ne že preko te vrstice prek PHP-ja izvršimo zahtevek ali je to drugače?$img_src = "image/sample.png";
Hvala za odgovor!
To ni request, v tem stavku samo nastaviš ime datoteke v vrednost spremenljivke.
V vrstici
$imgbinary = fread(fopen($img_src, "r"), filesize($img_src));
pa iz te datoteke lokalno prebereš vsebino datoteke v string. Enako lahko narediš z
$imgbinary = file_get_contents($img_src);
V bistvu pa ne vidim preveč smisla za tako uporabo. Dobiš bolj obremenjen strežnik zaradi branja v php, več prometa, slabše lahko izkoristiš caching ...