Как стать автором
Обновить

Комментарии 34

НЛО прилетело и опубликовало эту надпись здесь
Через WebSocket? Если расскажите как — попробую!
*расскажете
НЛО прилетело и опубликовало эту надпись здесь
Большой не объем, а трафик.

POST и GET не подходят, потому что это не push.
Браузер сам распакует, вы даже не заметите :-) Пропишите только в ответе Content-Encoding: gzip, и дело в шляпе :-)
Пойдите еще дальше и преобразуйте
var people = [{ name:'Alan Watts', death_date:'November 16, 1973',location:'Chislehurst, England',cause:'Alcohol poisoning'} ,age:58}];
в
var people = [['Alan Watts','November 16, 1973','Chislehurst, England','Alcohol poisoning',58]];
и передайте одно поле с порядком переменных
Не понял. Напишите оба варианта, если не трудно.
var people = [{ name:'Alan Watts', death_date:'November 16, 1973',location:'Chislehurst, England',cause:'Alcohol poisoning' ,age:58},
{ «name»:«John Barrymore» ,«death_date»:«29 May 1942» ,«location»:«Hollywood, United States» ,«cause»:«Various» ,«age»:60 }];

в

var people = [{ name:'Alan Watts', death_date:'November 16, 1973',location:'Chislehurst, England',cause:'Alcohol poisoning' ,age:58},
[ «John Barrymore» ,«29 May 1942» ,«Hollywood, United States» ,«Various» ,60 ]];
А, понятно. Так ведь нету выигрыша. По сравнению с записью массивов. Имена столцбов передаются по разу, значения тоже. И там, и там.
?
Преобразовать в один проход можно.
Хотя нет, признаю свою неправоту. Сейчас попробовал сделать, и Ваш код работает на порядок быстрее.
Сильно удивлен.
Возможно кто-то подскажет почему код работает так медленно?
function unshrink (s)
{
	if (s.constructor != Array) return;
	for (var i=1, l=s.length; i<l; i++)
	{
		var o = {};
		for (var j=0, k=s[i].length; j<k; j++)
		{
			o[s[0][j]] = s[i][j];
		}
		s[i] = o;
	}
	s = s.slice(1);
	return s;
}
из-за slice()? Попробуйте в фаербаге включить profile и посмотрите на большом массиве данных, кто тормозит.
И без slice пробовал. Тормозит не он.
Профилировать с помощью фаербага — нечего. Не вызывается ни одна функция внутри.
Разобрался. Оказалось что неправильный массив я скармливал функции unshrink из статьи.
Так что всё нормально. Как я и ожидал, моя функция дала прирост производительности на ~400%
НЛО прилетело и опубликовало эту надпись здесь
Коллеги, бездумно плюсующие этот комментарий. У меня к вас вопрос.

Где гарантия, что цикл for (in) будет обходить значения в том порядке, в котором они перечислены в JSON представлении? Где в спецификации написано, что гарантируется обход именно в этом порядке?

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

В остальном все нормально, можете плюсовать дальше…

>> NULL ячейки будут представлены строкой «undefined» в JSON представлении записи массивов

[,,,] — массив из 4-х undefined в IE, и из 3-х во всех остальных браузерах. Т.е. не последний элемент можно смело пропускать.
{ name:'Alan Watts', death_date:'November 16, 1973',location:'Chislehurst, England',cause:'Alcohol poisoning'} // ,age:58}

На всякий случай, это не JSON. Это Javascript.
На тот-же случай, выдержка из википедии:
JSON (англ. Javascript Object Notation) — текстовый формат обмена данными, основанный на Javascript и обычно используемый именно с этим языком. (http://ru.wikipedia.org/wiki/JSON)

Ну, а приведённая вами строка соответствует формату json.
Не соответствует: http://www.json.org/. Кавычки одинарные использовать нельзя.
Благодарю за уточнение.)
А еще имена ключей тоже должны быть заключены в кавычки.
{ "name": "Alan Watts", ...
Забыл добавить JSON lint
а кавычки?
собственно, после update весь топик можно помечать, как вредный совет и приводить как иллюстрацию правила «преждевременная оптимизация — зло».
Я вот только одного не понимаю. Когда мы выбираем данные из базы данных, то почему мы не выбираем только значения? То есть массив, строки которого — строки из таблицы в базе, столбцы — столбцы. Снабдить его ещё именами столбцов — и всё, никаких преобразований и shrink не надо.
Не знаю. Наверное потому, что читабельность первого варианта намного выше.
Вы же с читабельностью успешно поборолись.
возможно, лучше вместо json использовать protobuf от google.
было бы чудесно сравнить производительность Вашего метода с реализацией на Protocol Buffers.
JSON хорош тем, что ему в браузере можно сказать eval().
это ясно. но для оптимизации, я бы также посмотрел и в сторону Protocol Buffers.
возможно, это уходит за рамки данной статьи, но было бы интересно посмотреть сравнение производительности JSON и Protocol Buffers.
И название статьи получается хорошее: JSON Dataset by Krovosos vs Protocol Buffers by Google :)
оч. интересно. Видимо, за этим будущее. А gzip лучше ждем из-за особенностей фрейма.
Что за программа из второго апдейта?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории