GWT Лучшая практика для отправки огромного количества данных с сервера на клиент - PullRequest
8 голосов
/ 09 августа 2011

Каковы лучшие практики для отправки огромного объема данных с сервера на клиент в GWT?

В настоящее время мы сталкиваемся с проблемой производительности в GWT 2.3.0.

Наша серверная сторонаотправляя огромный xml (размер в МБ / ГБ) на клиентскую сторону, наша клиентская сторона анализирует этот xml и, используя проанализированные данные, формируется список bean-компонентов для заполнения данных в сетке Celltable.

Мы заполняем 1k + / 10k +записей в сетке CellTable.

Есть ли эффективный способ / лучшие практики, применяемые при работе с такими огромными данными?Если мы анализируем данные на стороне сервера и формируем компоненты на стороне сервера, это хорошо?или любой другой способ ..

Любая помощь или руководство в этом вопросе будет принята с благодарностью.

Ответы [ 4 ]

6 голосов
/ 09 августа 2011

По сути, вы запрашиваете столько данных (и немного больше), сколько в данный момент просматривает пользователь, а не весь набор данных.

Подробнее см. Добавление элементов управления пейджингом .

3 голосов
/ 11 августа 2011

Как и в других ответах, возвращайте только те данные, которые пользователь может использовать с пользой, и лениво извлекайте другие данные, когда пользователь их запрашивает (или Predictive Fetch ).

См. Раздел AsyncDataProvider здесь: http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html#data-provider

3 голосов
/ 09 августа 2011

Две практики при работе с большими данными для вашего случая:

1) Используйте JSON вместо xml, так что клиенту не нужно анализировать данные, но он может напрямую использовать данные. В GWT через интерфейс GWT-JSNI вы можете записывать объекты данных, обращающиеся к этим объектам JavaScript, см .: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html. Используя библиотеку JSON REST, вы можете генерировать JSON на сервере вместо отправки xml клиенту. Но вы также можете использовать GWT-RPC на клиент-сервере, что упрощает программирование, поскольку все преобразования данных в JSON и из него обрабатываются GWT, но добавляют некоторую информацию о типе к отправляемым объектам.

2) Использовать пейджинг: получать только те данные, которые видны пользователю, и кэшировать их на клиенте. Если у вас есть представление таблицы, маловероятно, что пользователю понадобятся все данные одновременно. Панели ячеек GWT имеют встроенную поддержку (см. Ссылку, которую Оливер упоминает о добавлении элементов управления пейджингом)

2 голосов
/ 09 августа 2011
  1. Использовать пейджинг.Виджеты ячеек GWT поддерживают постраничную подкачку.Поэтому реализуйте пейджинг на стороне сервера, чтобы каждый раз, когда вы нажимали «Далее», выполнялся серверный вызов.Таким образом, клиент имеет дело только с 10 или 20 записями одновременно.

  2. Используйте типы наложения Javascript в качестве компонентов отображения.И для заполнения этих компонентов используйте JSON в качестве транспортной модели вместо XML.Если вы используете XML (т.е. асинхронные вызовы), то GWT выполняет некоторую логику JAXB для маршаллинга / демаршаллинга в бэкэнде.Если вы используете JSON, этого можно избежать.

...