Да нет соли... Просто хожу, выпытываю, разузнаю, вынюхиваю... Кто как че мутит, кто как че не мутит... Добавлено спустя 51 секунду: Кого от чего тошнит и почему... Добавлено спустя 1 минуту 6 секунд: У меня такое бывает...
ну сам подумай: бинарные данные весят пусь кб 200, в base64 это будет минимум раза в 3 больше сразу же. P.S. да, я такой изврат пользую, но не для страничков, а для веб-сервисов, когда надо получить от клиента или отдать ему какие-то бинарные данные.
Если картинки совсем маленькие, значки какие-нибудь, и отрисовываются в canvas, или мне почему-либо не хочется, чтобы было много запросов при открытии страницы, или картиночки всегда разные (не кешируются), то внедряю в стили или скрипт. Но вот для большого количества обычных картинок (статический контент типа) нет смысла так делать.
Видимо автар хочет закрыть доступ к файлам, что бы все работало через единую точку входа, а вот изображения отдавать через их перекодирование в base64. У самого когда то летали такие мысли, но.. решил не заморачиваться, хотя скорее повода не было. PS это перекодирование не всегда нормально работает, я помню сделал скрипт, просто на сервере он работает, а вот загрузил я его в WordPress, уже не работает. Сколько не рылся и не крутился, так и не нашел в чем косяк. PS2 я бы не стал таким заниматься.
Я тоже в стилях использую... Да вот думаю все. Понятно, конечно, что и весит много... Да и пыха не так уж и быстро преобразует все это дело в нужный вид. Но вот отсутствие лишних запросов как то так подкупает. Хотя... Кароч не знаю я, надо думать. Добавлено спустя 4 минуты 41 секунду: Нормально там все работает. Плавали. Долго только (во всяком случае на джино). Добавлено спустя 3 минуты 51 секунду: Не, все правильно, фигня все это...
Годится для каптчи, динамического графика или текстур в стилях. Ведь такое решение снижает количество запросов, когда больше трафика уходит на заголовки, чем на сами данные (утрировано). Беречь вычислительные ресурсы клиента не нужно. Добавлено спустя 3 минуты 13 секунд: К тому же гзип на этапе отдачи страницы сожмёт картинку почти до исходного. Так что трафик тот же, запросов - меньше.
jpeg 1643 байта Код (Text): $img = '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'; echo strlen($img); //2192 echo "<br>\r\n"; echo strlen(gzencode($img, 9)); //1617
Почему так? Каждый символ в base64 символизирует число от 0 до 63, иначе говоря - шесть бит. Но сам символ весит восемь бит. В двоичном представлении это выглядит так: полезные группы из 6 бит каждая отделены друг от друга двумя нулями. Именно поэтому строка base64 на треть длинее. Gzip восстанавливает справедливость, задействуя все биты для хранения информации, естественно, практически не сжимая сам JPEG.
Эти "лишние" запросы проходят разово. Потом либо ресурсы храним в кэше браузера, либо, как модные посоны, аяксим то, что нужно, не дергая ресурсы. А лучше и то и то. Добавлено спустя 2 минуты 29 секунд: Я теперь буду вспоминать эту фразу каждый раз, когда буду открывать браузер с 20 закрепленными страницами и ждать, пока он отлипнет.
Прикольно Код (PHP): $img = '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'; echo strlen(base64_decode($img)); //1643 echo "<br>\r\n"; echo strlen($img); //2192 echo "<br>\r\n"; echo strlen(gzencode($img, 9)); //1617 echo "<br>\r\n"; echo strlen(gzencode(base64_decode($img), 9)); //1611
залипающий браузер - это проблема в архитектуре самого браузера (например нежелание выносить обработку в другой поток). Но претензия на неэкономность ресурсов клиента обоснована, например, когда речь заходит о терминальном сервере. а вообще нет ничего страшного в отдаче бинарников в base64, любой веб-сервис предполагает такой обмен.
Расскажи это хрому, у которого деление идет не на потоки, а вообще на процессы. 1 страничка = 1 процесс.
залипание происходит как раз на уровне процесса, нужно разделять интерфейс и долгую обработку данных. Еще есть методы межпроцессного взаимодействия, которые могут являть собой "бутылочное горлышко" (крит.секции), так что и в этом случае могут быть тормоза