Передача большого набора данных клиенту - массивы Javascript или JSON? - PullRequest
4 голосов
/ 22 сентября 2009

Я передаю клиенту таблицу из 1000 строк, состоящую из значений имени, идентификатора, широты и долготы.

Список будет затем обработан Javascript и преобразован в маркеры на карте Google.

Первоначально я планировал сделать это с JSON, так как я хочу, чтобы код был читабельным и легким в обращении, а также потому, что со временем мы можем добавить к нему больше структуры.

Однако мой коллега предложил передать его в виде массива Javascript, поскольку это значительно уменьшило бы его размер.

Это заставило меня задуматься, может быть, JSON немного избыточен. В конце концов, для каждой определенной строки имя каждого поля также выводится многократно. Принимая во внимание, что для массива положение ячеек используется для указания поля.

Однако будет ли повышение производительности при использовании массива?

Сайт использует сжатие GZIP. Является ли это сжатие достаточно эффективным, чтобы позаботиться о любой избыточности, найденной в строке JSON?

[править]

Я понимаю, что JSON - это просто нотация.

Но мой реальный вопрос - какая нотация лучше всего с точки зрения производительности?

Если я использую полностью именованные атрибуты, тогда у меня может быть такой код:

var x = resultset.rows[0].name;

Принимая во внимание, что если я этого не сделаю, он будет выглядеть менее читабельным, например:

var x = resultset.rows[0][2];

Мой вопрос: стоит ли жертвовать читаемостью кода ради повышения производительности? Или нет?


Дополнительные примечания:

Согласно Википедии, алгоритм сжатия Deflate (используемый gzip) выполняет «Удаление дубликатов строк». http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination

Если это правильно, у меня нет причин беспокоиться о какой-либо избыточности в JSON, поскольку об этом уже позаботились.

Ответы [ 2 ]

9 голосов
/ 22 сентября 2009

JSON - это просто нотация (нотация объектов Javascript), которая включает в себя массивы JS - даже если в ее имени есть слово «объект».

См. Ее грамматику в http://json.org/, которая определяет такой массив (цитирование) :

Массив - это упорядоченная коллекция ценности. Массив начинается с [ (слева скобка) и заканчивается ] (справа скобка). Значения разделены , (Запятая).

Это означает, что (взято из Образец набора данных JSON ) будет действительным JSON:

[ 100, 500, 300, 200, 400 ]

Даже если он вообще не включает в себя и не объявляет, ни какой-либо другой объект.


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

Если вас беспокоит размер, вы можете сами сжать эти данные на стороне сервера и распаковать их на стороне клиента - но я бы не стал этого делать: это означало бы, что вы нужно больше времени обработки / мощности на стороне клиента ...

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

4 голосов
/ 22 сентября 2009

Я предлагаю использовать простой формат CSV. В блоге разработчиков Flickr есть отличная статья , в которой они рассказывают о своем опыте решения такой проблемы. Но лучше всего попробовать самому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...