Я не думаю, что AMF будет значительно меньше, чем JSON. Фактически, во многих случаях он может быть немного большим. Позвольте мне показать это на примере:
AMF сохраняет строку «фыва олдж» в следующем двоичном формате:
0x12 /* type = string */
0x00 0x04 /* length */
'a' 's' 'd' 'f'
/* total: strlen(s)+3 bytes */
в то время как JSON хранит строку «ASDF» в STRLEN (ы) + 2 байта, если не содержат кавычек в строке.
AMF сохраняет объект JSON {"key1":"asdf","key2":"foo"}
в следующем двоичном формате:
0x03 /* type = object */
0x00 0x04 /* length of key1 */
'k' 'e' 'y' '1'
0x02 /* value type = string */
0x00 0x04 /* length of value1 */
'a' 's' 'd' 'f'
0x00 0x04 /* length of key2 */
'k' 'e' 'y' '2'
0x02 /* type of value2 */
0x00 0x03 /* length of value2 */
'f' 'o' 'o'
0x00 0x00 0x09 /* end of object */
/* total: 30 bytes, while the JSON string is 28 bytes */
Приведенные выше примеры были в AMF0, но я не думаю, что AMF3 будет сильно отличаться.
Единственная функция в AMF0, которая может значительно уменьшить пропускную способность, состоит в том, что она содержит ссылочный тип: если вы отправляете один и тот же большой объект дважды, второй объект будет только обратной ссылкой на первый экземпляр. Но это редкий случай IMHO (и он работает только для объектов, а не для строк).
Поэтому я бы порекомендовал JSON (если вы действительно хотите сэкономить на байтах, вы можете сжать его с помощью zlib или чего-то еще): его гораздо проще читать, реализовано гораздо больше реализаций, а спецификация понятна (в то время как Flash реализация иногда отличается от спецификации - нам всем нравится Adobe;))
Это, безусловно, зависит от данных, которые вы передаете. Мне нужно создать приложение для мини-переписей, которое выполняет меньшие наборы данных. :) –
Убедитесь, что вы читаете @ user562816 ответ, AMF3 должен быть намного меньше. –