Nie sądzę, że AMF byłby znacznie mniejszy niż JSON. W rzeczywistości może być nieco większy w wielu przypadkach. Pokażę to na przykładzie:
AMF sklepów ciąg „asdf” w następującym formacie binarnym:
0x12 /* type = string */
0x00 0x04 /* length */
'a' 's' 'd' 'f'
/* total: strlen(s)+3 bytes */
podczas JSON przechowuje ciąg „asdf” w strlen (s) + 2 bajty, jeśli istnieje nie ma cudzysłowów w ciągu znaków.
AMF przechowuje obiekt JSON {"key1":"asdf","key2":"foo"}
w następującym formacie binarnym:
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 */
Powyższe przykłady były w AMF0, ale nie sądzę AMF3 byłoby zupełnie inaczej.
Jedyną funkcją w AMF0, która może znacznie zmniejszyć szerokość pasma, jest to, że zawiera typ odniesienia: jeśli dwa razy ten sam duży obiekt zostanie wysłany, drugi obiekt będzie tylko odwołaniem do pierwszej instancji. Ale jest to rzadki przypadek IMHO (i działa tylko dla obiektów, a nie dla łańcuchów).
Polecam JSON (jeśli naprawdę chcesz zaoszczędzić na bajtach, możesz skompresować go za pomocą zlib lub cokolwiek): jest to znacznie prostsze do odczytania, jest znacznie więcej implementacji, a specyfikacja jest jasna (podczas gdy Flash implementacja czasami różni się od specyfikacji - wszyscy lubimy Adobe;))
Zależy to oczywiście od danych, które przesyłasz. Muszę utworzyć mini-aplikację Census, która wykonuje mniejsze zestawy danych. :) –
Upewnij się, że czytasz odpowiedź @ user562816, AMF3 powinno być o wiele mniejsze. –