2013-03-20 3 views
1

У меня есть объект JSON, содержащий около 150 записей формы [key] : [sentence], где предложение часто содержит один и тот же текст снова и снова. Например:JSON объект повторяется строка эффективность

var test = { 
    "abc" : "This is the first sentence that is in this JSON object. Hello! Blue." 
    "abd" : "Red. This is the second sentence that is in this JSON object. Hi!" 
    "abe" : "This is the third sentence that is in this JSON object. Hey! Yellow." 
    "abf" : "White. This is the fourte sentence that is in this JSON object. Hola!" 
} 

Вы можете видеть, что строка «предложение, которое находится в этом объекте JSON». повторяется довольно часто. Было бы более эффективным заменить его некоторым якорем, а затем заменить якорь, как только я получу запись с объекта? То есть:

var test = { 
    "abc" : "This is the first #anchor# Hello!" 
    "abd" : "This is the second #anchor# Hi!" 
    "abe" : "This is the third #anchor# Hey!" 
    "abf" : "This is the fourte #anchor# Hola!" 
} 

var anchor = "sentence that is in this JSON object." 

И после получения желаемого значения от JSON, замените строку фактическим текстом? Предложения не имеют определенного шаблона, но большое количество из них содержит повторяющуюся строку текста. Спасибо за ваши предложения!

+1

Короче говоря, да. – smk

+0

Просто используйте сжатие. Тем более, что вы не можете использовать переменные в JSON. – Bergi

+0

Если ваш сервер gzips выводит, я бы не стал беспокоиться об этой оптимизации. – Vlad

ответ

0

Если ваша загрузка JSON является gzipped (что весьма вероятно), вы, вероятно, не сэкономите много полос пропускания, если они есть. Сжатие Gzip очень хорошо удаляет повторяющиеся строки.

Чтобы узнать, поместите свой JSON в файл, затем используйте любую утилиту Gzip, чтобы сделать из него файл .gz. Сделайте то же самое с другой версией своего JSON, а затем сравните размеры двух файлов .gz. Вы можете быть удивлены, как мало различий.

Если у вас нет утилиты Gzip, получите 7-Zip.

Пропускная способность в сторону, вы можете сохранить память в браузере, объединив строки. Стоит ли это того или нет, зависит от того, сколько строк мы говорим.

+0

Я не посылаю весь JSON. Только тот результат, который я получаю от JSON. Все данные находятся на сервере, и клиент получает только один результат, а не весь файл. Или я не понимаю ваш ответ? :) – mart1n

+0

То, что я имел в виду, это то, что вы отправляете.В вашем вопросе, который представляется объектом, содержащим несколько строк. Не могли бы вы привести конкретный пример фактического содержания JSON, о котором мы говорим? То есть точное содержание ответа JSON. –

+0

В приведенном выше примере ответ будет, например, 'Red. Это второе предложение, которое находится в этом объекте JSON. Привет! '. Или любые другие значения. То есть объект хранится на сервере, запрос отправляет ключ, а ответ - значение для этого ключа. – mart1n

0

В зависимости от количества записей, это может сэкономить некоторое количество памяти или пропускной способности сервера, но я не думаю, что его стоит сложность и вычислительная мощность, необходимые для восстановления предложений.

В любом случае это плохая оптимизация ИМО. Используйте стандартные оптимизации, такие как gzip, которые, естественно, обрабатывают повторяющиеся строки.

+0

Какое количество замещающих записей станет лучшим вариантом. (прямо сейчас у меня около 100 записей примерно в 5 объектах JSON) – mart1n

+0

Это не так, чем больше записей, тем больше строк concat на стороне клиента. В любом случае это плохой оптимизационный ИМО. Используйте стандартные оптимизации, такие как gzip, которые, естественно, обрабатывают повторяющиеся строки. – zachzurn

0

В основном, вы говорите о пропускной способности для расчета трафика. В исходном случае требуется больше полосы пропускания и нет вычисления после загрузки (замена строки). В последнем случае пропускная способность меньше, но у вас есть пост-обработка, которая должна произойти.

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