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 の唯一の機能は、参照タイプが含まれていることです。同じ大きなオブジェクトを 2 回送信すると、2 番目のオブジェクトは最初のインスタンスへの後方参照になります。しかし、それはまれなケースです(文字列ではなく、オブジェクトに対してのみ機能します)。
したがって、JSONをお勧めします(本当にバイトを節約したい場合は、zlibなどで圧縮できます):読みやすく、実装がはるかに多く、仕様が明確です(Flashの実装は異なる場合があります)仕様から - 私たちは皆 Adobe が好きです ;))