Алгоритм сжатия для JSON закодировал пакеты?

15
задан Trott 20 September 2011 в 19:55
поделиться

4 ответа

Я думаю, что два вопроса будут влиять на Ваш ответ:

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, довольно проста, и я думаю, может быть оставлен как "осуществление для читателя", как они говорят.)

9
ответ дан 1 December 2019 в 03:43
поделиться

Ummm... Исправьте меня, если я неправ, но если Вы реализуете на-проводном сжатие, затем Вы управляете обоими концами соединения, правильно? В этом случае, если бы JSON является слишком толстым протоколом, почему Вы только не выбрали бы другой проводной протокол, который не является столь же толстым? Я имею в виду, я понимаю обращение использования стандарта как JSON, но если Вы обеспокоены пропускной способностью, затем, вероятно, необходимо выбрать проводной протокол, который не является всем текстом.

2
ответ дан 1 December 2019 в 03:43
поделиться

Позвольте веб-серверу сжаться и распаковка браузера исходно; gzip или выкачивают.

2
ответ дан 1 December 2019 в 03:43
поделиться

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).

0
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: