Плохой запрос GWT Factory производительность для списка объектов
Я передаю список объектов клиенту с запросом GWT Factory. Объекты содержат только пару строк, и список содержит только 20 объектов. Для переноса этого небольшого списка данных требуется более секунды. Сначала я думал, что запрос нужно оптимизировать. Но измерение показывает:
Извлечение объектов из базы данных требует только
300ms
Передача клиенту занимает в общей сложности более секунды
1136ms
Таким образом, это, как представляется, запрос factory служебных данных. Я уже использовал свой собственный ServiceLayerDecorator
и переопределил функцию isLive()
, чтобы он всегда возвращал true
. Есть ли какие-либо другие действия, которые я могу предпринять, чтобы ускорить это и привести производительность в приемлемую область?
Update:
Я создал логику для копирования данных объекта объекта в DTO и передал их RPC для сравнения RPC и Request factory. Как вы видите, RPC-логика намного быстрее. Теперь мне интересно, если это по дизайну или есть недостатки в моем приложении.
20 перенесенных объектов:
Request factory: 1252 ms
RPC: 420 ms
28 перенесенных объектов:
Request factory: 1654 ms
RPC: 460 ms
78 перенесенных объектов:
Request factory: 3963 ms
RPC: 769 ms
=============================================== =============
Update2
Итак, я написал очень простое примерное приложение, чтобы убедиться, что у моего приложения нет фильтров или других мешающих компонентов. Приложения загружают 10 объектов с 4 строковыми полями с сервера. Я сделал это с помощью запроса factory, а также RPC и остановил время.
Код можно найти здесь:
https://github.com/jan10101/requstFactoryVSRPC
Демо-версия жизни здесь:
http://requestfactorytest.appspot.com/
Приложение-тест подтверждает мое наблюдение: производительность запроса factory очень плохо по сравнению с производительностью RPC. В режиме dev производительность RPC примерно в 40 раз выше, в режиме производства - еще 4 раза. Я первый, кто замечает проблемы с производительностью?
Следующие скриншоты показывают результаты теста, если вы не хотите попробовать его самостоятельно.
Результаты в режиме dev:
![enter image description here]()
Результаты продуктивного кода (в приложении):
![enter image description here]()
Ответы
Ответ 1
Я не уверен, насколько это уместно для вашего конкретного случая, но проблема может быть AutoBeans. RequestFactory широко использует AutoBeans.
Недавно я смог решить проблему производительности в приложении GWT, уменьшив использование AutoBeans, которые выглядят очень медленно. Использование иерархического профилировщика производительности, такого как инструмент IE F12, идентифицировало Autobean-код как корень проблемы, поэтому проблема производительности была на стороне клиента. IIRC решение заключалось в том, чтобы скопировать AutoBeans на "реальные" объекты Java после завершения вызова.