2013-07-07 2 views
0

У меня есть веб-сайт, который содержит графики, отображающие записи активности сотрудников. Существуют уровни данных (например: регион -> состояние -> офис -> менеджер -> сотрудник -> запись активности), и каждый раз, когда вы нажимаете на график, он сверляет уровень, чтобы отобразить более конкретную информацию. Самый высокий уровень (область) требует, чтобы я загружал ~ 1000 объектов в массив, а самый низкий уровень - ~ 500 000 объектов. Я заполнении графы через отформатированный текстовый файл JSON с помощью:Альтернатива созданию большого массива Javascript для большого массива с помощью JSON-файла?

$.ajax({url:'data/jsondata.txt', dataType: 'json', 
     success: function (data) { 
     largeArray = data.employeeRecords; 
} 

Есть ли альтернативный метод, который я мог бы использовать, не мешая время отклика/производительность? Я доволен мыслью, что я должен предварительно загрузить всю клиентскую часть данных, иначе будет время отсрочки, если мне нужно будет получить ее при щелчке пользователя. Если кто-нибудь может указать мне на лучшие практики и, возможно, даже объяснить, что считается «Слишком много» клиентских данных, я бы это оценил.

FYI Я ограничен использованием старого веб-сервера, и если я хочу сделать что-нибудь на стороне сервера, я бы ограничился классическим ASP, иначе он должен быть на стороне клиента. Спасибо!

+0

Что представляет собой отдельная запись/содержать? Одно поле, много полей, вложенные массивы? Типы данных? – rlb

+0

имя, регион, офис, менеджер, номер сотрудника, тип деятельности, startTimestamp, endTimestamp. Это пример записи - в ней нет ничего вложенного. менеджеры запрашивают детали на этом уровне PER (несколько сотен мероприятий в день, несколько сотен сотрудников) – kdonah3

ответ

3

Если ваш сервер быстро

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

Если сервер работает быстро, но недостаточно быстро, то вы можете предварительно загрузить следующий уровень при рисовании первого. Например, если вы только что отобразили график на уровне «офиса», а затем предварительно загрузите данные «диспетчера» следующего уровня вниз, пока пользователь все еще реагирует на обновление экрана.

Если сервер является слишком медленным для передачи данных по требованию

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

  1. Является ли сервер медленным, чтобы запросить базу данных, если да, исправьте ее. Мало что вы можете сделать на стороне клиента, чтобы решить эту проблему.
  2. Является ли сервер медленным для пакета для передачи? Сложнее исправить, сервер достаточно большой?
  3. Сетевая передача медленно? Хм, вам нужно отправить меньше данных или получить пользователей на более высокую пропускную способность.
  4. Время распаковки браузера происходит медленно? (т.е. задержка декодирования данных до того, как ваш скрипт может ее нарисовать). Измените, как вы упаковываете данные или отправляете меньше данных, таких как куски.

Могут ли браузеры обрабатывать 500 000 объектов? Вы должны иметь возможность просто контролировать память используемого вами браузера, и есть опционы «да/нет» на этом. Будет действительно зависеть от пользователей браузера/оборудования.

Возможно, вам понравится этот вопрос What is the most efficient way of sending data for a very large playlist over http?, поскольку он показывает альтернативный способ отправки и обработки данных, которые, как я обнаружил, намного быстрее для шага 4 выше. Конечно, на объектах 500k вы больше не сможете использовать localStorage, но я экспериментировал с загрузкой миллионов элементов массива, и он работает нормально. (еще WIP) Я не использую jquery, поэтому не уверен, насколько это возможно.

Лучшая практика? Извините, я не могу помочь с этой частью вопроса.

Смежные вопросы