2012-03-31 2 views
1

Я хотел бы предоставить пользовательские двоичные данные в браузер. Они на самом деле являются изображениями, но мне нужно доставить несколько версий одного и того же изображения + некоторые метаданные. Производительность сети должна быть достигнута с использованием только одного запроса GET, и он должен быстро распаковываться в браузере. До сих пор я мог думать об этих решениях:Каков самый быстрый способ доставки двоичных данных в браузер?

  • изображение спрайта (насчет метаданных?)
  • ZIP
  • msgpack
  • JSON + base64 кодирование

Я не забочусь около < IE8. Я думаю, что избежать XHR в моем случае невозможно, но одна и та же политика происхождения делает его еще хуже, поскольку мне нужно загрузить из другого (дополнительного) домена. Это может быть выполнено, хотя и с помощью маршрутизации сервера, с другой стороны, что предотвращает использование CDN.

+0

Если изображения без потерь сжатого вы можете создать спрайт изображения и добавить область спрайта, где вы можете хранить метаданные (внутри значений пикселей). Затем вы должны использовать + JS для чтения значений пикселей и, таким образом, метаданных. – CAFxX

+0

Если OTOH, изображение сжато JPG, вы все равно можете использовать один и тот же трюк: просто используйте 8x8 выровненных постоянных пиксельных блоков, и вам должно быть хорошо идти. – CAFxX

+0

Вы хотите сделать файл downloadble из двоичных данных? Если это так, для HTML5 для этого есть хороший API. Недостатком является поддержка браузера. – pimvdb

ответ

1

Это зависит от структуры данных, но если вам нужно что-то делать с этими данными в JavaScript - есть два (три) путь достижения этой

  • JSON + base64 или вылетающих специальных символов
  • XML + base64 или escaping (выбор между одним из них зависит от предпочтений)
  • Более сложный, но наиболее эффективный - обычный текст с экранированным 0 символом и специальными знаками (создайте три специальных кода - 0x20 0x40 для 0x00 char, 0x20 0x41 как знак и 0x20 0x42 для 0x20)
+0

Мне не нравится идея кодирования base64 для преодоления ограничений JSON или XML. Не могли бы вы объяснить, что третий вариант немного больше? – skrat

+0

Если вы используете json, вам не нужно использовать base64, просто избегайте некоторых специальных кодов (например, 0 и] для CDATA в XML или \ 0, \ r, \ n, \ в json - этого может быть достаточно). Третий вариант заключается в том, чтобы сделать пакет данных в формате СОБСТВЕННЫЙ (Слишком двоичный/0x20 0x41 на конец данных), заменить специальные коды, отправить его и обработать в JavaScript - разделить на 0x20 0x41 ('A') – SergeS

+0

Выбрано больше информации о msgpack - он лучше всего подходит для размера данных, но нестабилен – SergeS

0

Оказалось, что сегодняшние (и ближайшее будущее - IE9) браузеры имеют очень плохую поддержку двоичных данных, поэтому, что бы вы ни решили использовать, его нужно кодировать (кодировать?) В строку Javascript String, т.е. JSON + base64.

Для любопытных умов: http://status-501.tumblr.com/post/20293218962/delivering-binary-data-to-browser

Смежные вопросы