Я не думаю, что AMF будет значительно меньше, чем JSON. На самом деле, он может быть немного больше во многих случаях. Позвольте мне показать это на примере:
AMF сохраняет строку «asdf» в следующем двоичном формате:
0x12 /* type = string */
0x00 0x04 /* length */
'a' 's' 'd' 'f'
/* total: strlen(s)+3 bytes */
в то время как JSON хранит строку «asdf» в strlen (s) + 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, которая может значительно уменьшить пропускную способность, состоит в том, что она содержит ссылочный тип: если вы отправляете один и тот же большой объект дважды, второй объект будет только обратной ссылкой на первый экземпляр. Но это ИМХО редкий случай (и он работает только для объектов, а не для строк).
Поэтому я бы порекомендовал JSON (если вы действительно хотите сэкономить на байтах, вы можете сжать его с помощью zlib или чего-нибудь еще): его намного проще читать, гораздо больше реализаций и спецификация ясна (в то время как реализация Flash иногда отличается от спецификации - нам всем нравится Adobe;))