У меня есть приложение, которое работает немного медленный по Интернету из-за причин пропускной способности. Я включил GZip, который улучшил время загрузки значительным amout, но я также рассматривал, мог ли я переключиться от XML до JSON для отжимания того последнего бита производительности. Был бы с помощью JSON сделать размер сообщения значительно меньшим, или просто несколько меньшим? Скажем, мы говорим приблизительно 250 КБ данных XML (который сжимается до 30 КБ).
Не ответ, а скорее предложение проверить ваши предположения.
Как JSON меньше?
JSON:
"person":{"firstname":"Fred",
"lastname":"Flintstone",
"age":38,
"spouse":"Wilma" }
XML:
<person firstname='Fred'
lastname='Flintstone'
age='38'
spouse='Wilma'/>
Я просто не понимаю, как в целом выражение JSON будет на 30% меньше, чем «эквивалентный» XML. Даже если вы увеличите сложность этих вещей с помощью вложенных структур и массивов, разница не будет 30%. Это примерно эквивалентно: json получает преимущество, потому что конечный тег вложенной структуры - это}, тогда как XML получает преимущество, потому что ему не нужно заключать имена полей в кавычки.
Если вы заставили меня использовать элементы XML, например:
<person>
<firstname>Fred<firstname>
<lastname>Flintstone<lastname>
<age>38</age>
<spouse>Wilma</spouse>
</person>
... конечно, результирующий XML больше, чем предыдущий JSON. Но это похоже на обман.
Возможно, теперь в том, как вы форматируете XML, элементы используются для всего, и есть возможность соответственно уменьшить полезную нагрузку. Но это не обязательно подразумевает JSON. Если у вас есть инструменты и библиотеки, которые обрабатывают XML, вы можете сохранить XML и сжать его.
Вообще говоря, JSON намного быстрее и меньше, чем эквивалентный XML. XML богаче тем, что вы можете хранить метаданные (атрибуты) и контент отдельно, но того же можно добиться в JSON с соответствующими соглашениями о структурировании.
Да, JSON будет примерно на 30% быстрее, так как меньше символов перемещается по строке и его очень быстро анализировать.
Ypu может также взглянуть на "YAML", который отправляет абсолютный минимум метаданных в сообщении.
Лучший способ ответить на этот вопрос - протестировать его самостоятельно, поскольку задействовано сжатие. Вы также аккуратно избегаете священной войны XML и JSON, имея объективный ответ!
Так как это всего лишь тест, который на самом деле не нужен, вы можете просто написать конвертер xml-> json в javascript, который прошел бы дерево XML DOM и скопировал его во вложенную структуру массива / объекта, а затем передал его в JSON.stringify (). Единственная сложная задача - решить, что станет массивом, а что - объектом.
Найдите репрезентативную выборку (или несколько) отправляемых данных, преобразуйте ее в JSON с помощью своего инструмента, заархивируйте ее и исходный XML и сравните размеры.
Примечание: я поискал онлайн-конвертер XML-> JSON, и все они были ужасны - пробелы copius вне кавычек (недопустимы в JSON, изменяют размер) и имена ключей без кавычек (то же самое). Не используйте их для своего теста, иначе вы получите неверные данные.