2012-06-29 3 views
0

Каков наилучший способ визуализации больших данных в представлении? Есть ли способ сделать это по частям?Большая проблема с предоставлением данных

Действие контроллера создает большой набор данных (матрица 1000x1000) и возвращает его в режим просмотра. Когда я делаю это, браузер зависает. Данные создаются другой службой, и я не могу получить ее с меньшими порциями.

Матрица представляет собой двумерный массив значений INT.

контроллер код:

public ActionResult GetData() 
{ 
    var result = ThirdPartyService.GetData(); 

    return View(result); 
} 

Посмотреть код:

<table>    
     <% foreach (var x = 0; x < Model.Matrix.Count; x++) { %> 
      <tr> 
     <% foreach (var y = 0; y < Model.Matrix[x].Count; y++) { %> 
      <td><% = Model.Matrix[x, y] %></td> 
     <% } %> 
     </tr> 
    <% } %> 
</table> 
+3

Как пользователь должен обрабатывать все эти данные? –

+0

Как вы справляетесь с таким большим набором данных? Это практически бесполезно для пользователя для просмотра матрицы 1000x1000. –

+0

С другой стороны, если показать как 1-пиксель на точку данных, это дает изображение с очень скромным размером ... –

ответ

0

Вы можете отобразить пустую таблицу и получить данные с сервера для использования ajax для ее заполнения. Таким образом, вы загрузите макет и данные, но не контент <tr><td></td></tr>. Если вы делаете математику:

  • <tr></tr> для каждой строки дает 9 * 1000 = 9000 байт
  • <td></td> для каждой ячейки в каждой строке дает 9 * 1000 * 1000 = 9000000 байт
  • Всего: 9009000

Вы можете уменьшить примерно 9 мб от запроса, и это очень много!

Также вы можете включить GZip на сервере, чтобы данные перемещались сжатыми.

+0

«Вы можете отобразить пустую таблицу» - я должен отобразить его с помощью JavaScript? – Alexander

+0

просто поместите '

' в свою разметку, а затем заселите ее с помощью ajax. – ivowiblo

+0

Где я должен хранить промежуточные результаты? Действие контроллера вызывает другой метод службы, который возвращает эту большую матрицу. Где лучше поместить эту матрицу, чтобы затем запросить ajax? – Alexander

1

Я предполагаю, что матрица, размер не отображается на всю страницу, поэтому мое предложение динамически манипулировать DOM, так как пользователь прокручивает , присоединяясь к событию прокрутки. Это работало для меня довольно удивительно, используя SlickGird в качестве компонента рендеринга данных, с письменным настраиваемым плагином для обработки автоматического заполнения с более чем 1k элементами. У браузера нет проблем с обработкой больших наборов данных (я тестировал до 400 тыс. Объектов JS), но он определенно зависает при их отображении. Так что просто отрисуйте часть экрана, на которой вы находитесь.

+0

где я должен хранить матрицу? Я должен сохранить его в БД или в каком-то другом месте? – Alexander

+0

на самом деле это визуализируется, но требуется слишком много времени, и во время браузера он не отвечает. Мне нужно обойти это. – Alexander

+0

Вы можете сэкономить на стороне клиента, используя IndexedDB или localStorage (Search W3C или MDN для справки по этим технологиям). Что такое матричный элемент, это сложный объект или просто числовое значение. Если последнее, вы можете сохранить все в памяти (размер 1000 x 1000 будет занимать не более 4M + накладных расходов), если мы сохраним номер с 4B, 8M, если он хранится с 8B и т. Д.). – toske

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