Я пишу API для извлечения данных из Java-сервлета, подключенного к JDBC, через 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"
}
]
}
Если вы возвращаете много результатов, это много повторяется. Но мы собираемся передавать gzip, так что я не слишком обеспокоен пропускной способностью.
По сути, я должен спроектировать это так, чтобы получить доступ к своим данным с помощью
$.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, поэтому размер не имеет значения, а вычислительная сложность как на клиенте, так и на сервере достаточно схожа, и не имеет значения.
Для всех, кто заинтересован, вот мои данные с графиками !.