Я думаю, что два вопроса будут влиять на Ваш ответ:
1), Как хорошо можно предсказать состав данных, не зная то, что произойдет на каком-либо конкретном выполнении программы? Например, если Ваши пакеты похожи на это:
{
"vector": {
"latitude": 16,
"longitude": 18,
"altitude": 20
},
"vector": {
"latitude": -8,
"longitude": 13,
"altitude": -5
},
[... et cetera ...]
}
- затем Вы, вероятно, получили бы свое лучшее сжатие путем создания трудно кодированного словаря текстовых строк, которые продолжают показ в данных и заменяют каждое возникновение одной из текстовых строк с соответствующим индексом словаря. (На самом деле, если бы Ваши данные были этот регулярные, то Вы, вероятно, хотели бы отправить всего значения по проводу и просто записать функцию в клиент для построения объекта JSON из значений, если объект JSON необходим.)
, Если Вы не можете предсказать , который будут использоваться заголовки, Вы, возможно, должны использовать LZW, или LZ77 или другой метод, который смотрит на данные, которые уже пошли до находки данные, которые это может выразить в особенно компактной форме. Однако...
2) пакеты должны быть сжаты отдельно друг от друга? Раз так затем LZW определенно не метод, который Вы хотите; это не будет иметь времени для создавания его словаря до размера, который даст существенные результаты сжатия к концу единственного пакета. Единственный шанс получения действительно существенного сжатия в этом сценарии, по моему скромному мнению, состоит в том, чтобы использовать трудно кодированный словарь.
(Приложение ко всему вышеупомянутому: как Michael Kohne указывает, отправляя средства JSON, которые Вы, вероятно, отправляете всему тексту, что означает, что Вы - underusing пропускная способность, которая имеет возможность отправки намного более широкого диапазона символов, чем Вы используете. Однако проблема того, как упаковать символы, которые попадают в диапазон 0-127 в контейнеры, которые содержат значения 0-255, довольно проста, и я думаю, может быть оставлен как "осуществление для читателя", как они говорят.)
Ummm... Исправьте меня, если я неправ, но если Вы реализуете на-проводном сжатие, затем Вы управляете обоими концами соединения, правильно? В этом случае, если бы JSON является слишком толстым протоколом, почему Вы только не выбрали бы другой проводной протокол, который не является столь же толстым? Я имею в виду, я понимаю обращение использования стандарта как JSON, но если Вы обеспокоены пропускной способностью, затем, вероятно, необходимо выбрать проводной протокол, который не является всем текстом.
Позвольте веб-серверу сжаться и распаковка браузера исходно; gzip или выкачивают.
Gzip (deflate algorithm) is pretty good at compression, although like all good compression algorithms, uses plenty of cpu (3-5x as much as overhead of json reading/writing on my testing).