Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Протокол «jar» в FireFox

К сожалению, не удаётся сейчас найти эту статью, но я где-то читал около года назад про чьё-то предложение добавить в браузеры поддержку многофайловых архивов, даже какой-то черновик стандарта будто бы был. Хорошая ведь мысль — поместить несколько ресурсов (картинок, например), в архив и загрузить в браузер одним файлом. Например, можно было бы это использовать вместо ЦССных спрайтов.

Я тогда ещё подумал, что ведь уже есть один браузер, который уже это умеет — это «Файерфокс». У него есть протокол «jar», который ровно это и делает: позволяет адресоваться внутрь зип-архивов. Вообще, JAR расшифровывается как Java ARchive и предназначен для распространения программ и компонентов, написанных на языке Джава, но обычный зип-архив с файлами внутри.

Я уже четыре года назад пробовал воспользоваться этим протоколом, но где-то совершил ошибку, а сегодня у меня всё получилось.

Итак, адрес с протоколом jar выглядит следующим образом:

jar:/files/jartest.jar!/foto.jpg

Первая часть урла представляет любой адрес, по которому можно скачать архив (тут могут быть использованы протоколы http, https, file, ftp, но почему-то не data), вторая часть — путь до файла внутри архива, можете посмотреть у меня в разделе «Храню» пример как это всё работает, открывать, естественно, нужно в «Файрфоксе».

Код работы с jar (33.53КиБ)

Как видите, я поместил внутрь архива часть ЦСС и две картинки, одну из которых поставил задним фоном. Причём, как и в случае обычного урла, протокол по которому загружается ресурс можно опустить (часть «http», в данном случае), будет использован текущий протокол.

Но есть и бочка дёгтя. С пустым кешем или после обновления страницы архив грузится один раз, но если сделать полную перезагрузку страницы (⇧+⌘+R или шифт+контрол+R в Виндоуз), то загружается он столько раз, сколько раз ресурсов грузится на странице. Видимо, какой-то баг.

Ресурсы грузятся заново (10.46КиБ)
5 комментариев
Александр Карпинский 2013

rfc3986 поперхнулся, когда это читал.

greli (greli.livejournal.com) 2013

Так вроде HTTP2/SPDY и призван решить проблему задержек при загрузке многих файлов, чтобы отпала нужда в спрайтах и т.п.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для greli.livejournal.com:

У SPDY уже версия 3, а я всё ещё не слышал, чтобы от спрайтов отказывались. Поживём, увидим.

Михаил Калашник (splurov.livejournal.com) 2013

Больше похоже на баг Фаербага, предлагаю для уверенности проверить по логам сервера.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для splurov.livejournal.com:

Я уже проверил, поэтому и написал безо всяких сомнений.