Поскольку это огромный пост, здесь краткая сводка (пожалуйста, прочитайте дырочный пост, если вы хотите ответить, хотя):
Реализовано сейчас:
- Сайт извлекает много json (полный набор данных каждый раз ~ 30 КБ, уже распакован)
- Отображает данные в виде клиентской таблицы html
- Слишком много трафика
- Слишком много времени рендеринга
Ссылка на один из сайтов: Пример
Мы уже осуществили частичный поиск данных, теперь нам нужно найтирешение, которое:
- Отображает только изменения
- Обновление флеш-ячеек
Вопрос: Какие решетки или другие решения существуют для этого?случилось?
ОБНОВЛЕНИЕ : клиент хочет видеть все доступные данные одновременно, без подкачки .
Полное описание:
В нашем приложении нам нужно отобразить определенное количество строк (~ 300-1000) в сетке.Посетители могут сортировать (на стороне клиента) , нажимая на заголовки.Кроме того, каждая строка содержит несколько ссылок, которые открывают iframe с использованием colorbox .
Данные
- обновляются каждые 30 секунд (json с сервера)
- состоит из нескольких полей (строки, целые и десятичные числа).
- Меняются только десятичные дроби, это означает, что ссылки (colorbox) также остаются прежними
- отображаются не все данные, некоторые используются только для сортировки на стороне клиента
В настоящее время мы используем комбинацию jTemplates, tablesorter и colorbox для рендеринга всего набора данных json в html-таблицу.Текущий поток:
- Получение данных с сервера (полный набор данных)
- Отображение данных в html с использованием jTemplates
- Инициализация colorbox для таблицы
- Инициализация таблиц сортировки для таблицы
- Начните заново с # 1
Решение, описанное выше, работает, но есть некоторые проблемы:
- Много дублирующихся данныхполучает перевод.Это довольно быстро (> 5 ГБ / день)
- Рендеринг данных занимает довольно много времени (~ 300 мс), это хуже на мобильных устройствах
- Повторная инициализация colorbox и tableorter каждый раз занимает довольно много времени.некоторое время (~ 400 мс), что еще хуже на мобильных телефонах
Поэтому наша цель - просто передать обновленные и новые данные через json.Каждая строка имеет простой уникальный ключ (int), поэтому их можно легко идентифицировать.
Кроме того, мы хотим flash контейнер обновленных или вновь вставленных данных в качестве уведомления для пользователя о том, чтобыли изменения.
Поток, который мы имеем в виду:
- Получение данных JSON с сервера ( полный набор )
- Визуализация сеткис сортировкой и инициализацией ссылок colorbox
- Получение данных json с сервера ( только обновленные значения и новые строки )
- Обновление сетки ( только измененные значения и новые строки) <- также <strong>flash контейнер значений после обновления
- Начать снова с # 3
Таким образом, сетка, которую мы ищем, должна поддерживать загрузку данные в виде дыры , а также загрузка только обновленные значения .
Полный набор данных будет выглядеть так:
{
[
{
"key":1,
"StaticProperty":"value3",
"PropertyOne":2.85 ,
"PropertyTwo":1.99
},
{
"key":2,
"StaticProperty":"value2",
"PropertyOne":5.66,
"PropertyTwo":7.36
},
{
"key":3,
"StaticProperty":"value3",
"PropertyOne":1.78,
"PropertyTwo":9.31
},
{
"key":4,
"StaticProperty":"value4",
"PropertyOne":1.78,
"PropertyTwo":9.31
},
{
"key":5,
"StaticProperty":"value5",
"PropertyOne":1.78,
"PropertyTwo":9.31
}
]
};
Обновленный набор данныхбудет выглядеть (помните, что он будет содержать только измененные значения):
{
"updates" : [
{
"key":1,
"PropertyOne":4.88
},
{
"key":2,
"PropertyOne":2.77,
"PropertyTwo":3.88
},
{
"key":6,
"StaticProperty":"value6",
"PropertyOne":7.23,
"PropertyTwo":8.42
}
],
"deletes" : [ 4, 5 ]
};
Как вы можетеn см. обновление может содержать:
- частичные обновления (id # 1)
- несколько обновлений для каждой строки (id # 2)
- без обновлений для существующих строк (id # 3)
- идентификаторы удаленных строк как простой массив (id # 4, # 5)
- новые строки (id # 6)
Что нам нужноэто сетка или другие предложения, которые могут сделать нас способными всех упомянутых операций .
У нас уже есть способ убедиться, что данные никогда не будут повреждены (уже обработаны на стороне сервера и клиента), так что это действительно просто о отображение данных и поддержание актуальности дисплея .
Весь вклад приветствуется.