Ich glaube nicht, AMF wäre wesentlich kleiner als JSON. In der Tat kann es in einigen Fällen etwas größer sein. Lassen Sie mich diese zeigen in einem Beispiel:
AMF speichert die Zeichenfolge "asdf" im folgenden Binärformat:
0x12 /* type = string */
0x00 0x04 /* length */
'a' 's' 'd' 'f'
/* total: strlen(s)+3 bytes */
während JSON speichert die Zeichenfolge "asdf" in strlen (s) + 2 Bytes, wenn es sind keine Anführungszeichen in der Zeichenfolge.
AMF speichert das JSON-Objekt {"key1":"asdf","key2":"foo"}
im folgenden Binärformat:
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 */
Die obigen Beispiele in AMF0 waren, aber ich glaube nicht, AMF3 viel anders sein würde. Die einzige Funktion in AMF0, die die Bandbreite erheblich reduzieren kann, ist, dass sie einen Referenztyp enthält: Wenn Sie dasselbe große Objekt zweimal senden, ist das zweite Objekt nur eine Rückreferenz auf die erste Instanz. Aber es ist ein seltener Fall IMHO (und es funktioniert nur für Objekte, nicht für Strings).
Also ich würde JSON empfehlen (wenn Sie wirklich auf Bytes sparen wollen, können Sie es mit zlib oder irgendetwas komprimieren): es ist viel einfacher zu lesen, es gibt viel mehr Implementierungen, und die Spezifikation ist klar (während der Flash Implementierung unterscheidet sich manchmal von der Spezifikation - wir alle mögen Adobe;))
Es hängt sicherlich von den Daten ab, die Sie übertragen. Ich muss eine Mini-Census-App erstellen, die kleinere Datensätze erstellt. :) –
Stellen Sie sicher, dass Sie @ user562816 Antwort lesen, sollte AMF3 viel kleiner sein. –