Почему множественные вызовы RPC в GWT значительно замедляют время ответа? - PullRequest
0 голосов
/ 09 февраля 2011

Я тестирую приложение Google Web Toolkit и испытываю некоторые проблемы с производительностью при нескольких вызовах RPC. Структура приложения:

  • Пользователь отправляет запрос
  • Первоначальный запрос обслуживается одним серверным сервлетом
  • После получения первоначального ответа несколько компонентов впоследствии обновляются путем итерации по каждому компоненту и вызова метода обновления, передавая ему результаты начального запроса
  • Метод обновления каждого компонента выполняет некоторую работу с данными, передаваемыми ему, в дополнение к потенциально вызову других служб на стороне сервера
  • При успешном выполнении этих вызовов компонент обновляется в пользовательском интерфейсе.

При начальной службе запросов и 1 компоненте (эффективно работающем последовательно) время отклика быстро. Однако добавление любых других компонентов (например, службы начальных запросов + 2 компонента, эти 2 компонента вызывают асинхронно) очень сильно влияет на время ответа.

Есть ли способ улучшить / исправить это?

Пример: (IQS = начальный запрос, C1 = компонент 1, C2 = компонент 2, C1S = сервис comp. 1, C2S = сервис компонента 2)

Initial Query + 1 component

IQS, returned - propagating results, 1297273015477
C1, Sending server request,1297273015477
C1S, Sending back..., 1297273016486
C1, Receiving Complete, 1297273016522 (total time from initial call - 1045ms)

Initial Query + 2 components

IQS, returned - propagating results, 1297272667185
C1, Sending server request,1297272667185
C2, Sending server request,1297272668132
C1S, Sending back..., 1297272668723 
C2S, Sending back..., 1297272669371
C1, Back at client to process, 1297272671077 (total time from initial call - 3892ms)
C2, Back at client to process, 1297272674518 (total time from initial call - 6386ms)

Заранее спасибо.

Пол

Ответы [ 4 ]

1 голос
/ 09 февраля 2011

Я думаю, что вам нужно сделать свой анализ более детальным: в предоставленных данных вы установили, что клиент начал вызов 2-го компонента и получил ответ через 6386 мс.Отчасти это было

  1. Переход по проводам
  2. Получение на сервере
  3. Обработка на сервере (это также может быть нарушено).
  4. Отправлено обратно по проводам.

Служба GWT-RPC действительно имеет отношение только к 1 и 4. Вы знаете, сколько времени занимает каждый шаг?

0 голосов
/ 10 февраля 2011

Низкотехнологичный способ получить больше информации - установить базовую синхронизацию для каждого RPC, чтобы узнать, сколько времени они занимают.Создайте новый Date () вверху, вычтите его ms из нового ms Date () в конце, напечатайте его в stdout или используйте Log.info () или что-то еще.

Для чего-то более промышленногоЯ использовал «SpringSource tc» в сочетании с Chrome Speed ​​Tracer, чтобы получить полное представление о том, какие вызовы занимают какое количество времени и что в действительности может происходить параллельно.Настроить не просто, но как только я это сделал, я смог быстро сосредоточиться на реальных проблемах (в моем случае это было получение тонны ненужной информации из запросов Hibernate).

Вот основная информация, которую мы использовали:

Загрузите tc Server Developer Edition (бесплатно) http://www.springsource.com/products/tc-server-developer-edition-preview

ПРИМЕЧАНИЕ. Даже не думайте об установке в структуру каталогов с пробелами .....

Установка tc Server: основные шаги http://static.springsource.com/projects/tc-server/2.1/getting-started/html/ch06s02.html#install-developer-edition

Просмотр данных Spring Insight в Google Speed ​​Tracer http://static.springsource.com/projects/tc-server/2.0/devedition/html/ch04s04.html

url теперь является локальным: 8080 вместо адреса старого порта для другой установки tomcat.

Еще одна деталь, вам нужно создать файл .war и развернуть его в каталоге tomcat.(Вы не получаете данные перфоратора в режиме разработки, а используете локальный скомпилированный релиз GWT)

- Andrew @ learnvc.com

0 голосов
/ 09 февраля 2011

Издержки http с файлами cookie и последовательность некоторых из них (вместо того, чтобы запускать все запросы, когда пользователь переключается на другую часть приложения) является одной из причин, почему они, кажется, замедляют работу. НАПРИМЕР. Пользователь запрашивает страницу, когда виджеты этой страницы находятся на своем месте, он запускает запросы на данные, которые он должен показать, возможно, принимая решение добавить больше виджетов на основе этих данных (но, надеюсь, передать данные в эти виджеты).

Возможно, вам нужны инструменты, которые помогут вам создать пакетные вызовы rpc, например: gwt-dispatch . Я не думаю, что есть что-то автоматическое.

0 голосов
/ 09 февраля 2011

Ну, я думаю, что ваша проблема не имеет прямого отношения к GWT. Поскольку я использовал несколько вызовов RPC одновременно, производительность моего приложения не снизилась. Я думаю, что у вас могут возникнуть проблемы с синхронизацией на стороне сервера.

...