Я пишу API для извлечения данных из JSBC-подключенного Java-сервлета через JSON. Я решил использовать JSON, потому что мы захотим делать сортировки и другие операции с данными в браузере, и мы будем получать доступ к данным из разных доменов.
Поскольку я выполняю SQL-запросы в JavaScript, возвращаемые данные носят табличный характер. Я начал писать так, чтобы вы вернули список меток столбцов, а затем массивы значений, например:
{
"columns": [
"given_name",
"surname",
],
"results": [
[
"Joe",
"Schmoe"
],
[
"Jane",
"Doe"
]
]
}
Но когда я начинаю писать JavaScript для обработки возвращаемых данных, мне интересно, лучше ли просто выводить результаты с помощью пар ключ/значение, например:
{
"results": [
{
"given_name": "Joe",
"surname": "Schmoe"
},
{
"given_name": "Jane",
"surname" : "Doe"
}
]
}
Если вы возвращаете много результатов, много повторяющегося текста. Но мы собираемся транспортировать gzipped, поэтому я не слишком обеспокоен пропускной способностью.
В принципе, должен ли я это сделать, чтобы получить доступ к моим данным с помощью
$.getJSON(query, function(data) {
var columns = data.columns;
var results = data.results;
$.each(results, function(key, row) {
console.log(row[columns.indexOf('surname')]);
});
});
или гораздо красивее
$.getJSON(query, function(data) {
var results = data.results;
$.each(results, function(key, row) {
console.log(row.surname);
});
});
?
По сути, я хочу знать, может ли потенциальный удар по производительности оправдывать более чистый синтаксис последнего варианта.
Последующие действия
Я реализовал его в обоих направлениях и в профиле. Профилирование было отличной идеей! Различия в производительности были незначительными. Различия в размере передачи данных были существенными, но с сжатием Gzip разница составляла до 5-6% между обоими форматами и между очень большими и очень маленькими наборами данных. Поэтому я собираюсь с более красивой реализацией. Для этого конкретного приложения я могу ожидать, что все клиенты будут поддерживать Gzip/Deflate, поэтому размер не имеет значения, а вычислительная сложность как для клиента, так и для сервера аналогична достаточно, чтобы это не имело значения.
Для всех, кто интересуется, вот мои данные с графиками!