Что такое клиентская GWT-архитектура Wave? - PullRequest
2 голосов
/ 15 октября 2010

Мне интересно, знают ли некоторые из вас об архитектурных подходах, принятых командой Wave для создания своего веб-клиента GWT? Поскольку я пытаюсь оптимизировать производительность одного приложения GWT, разработанного для мобильных устройств, трудно не восхищаться его быстрыми учетными данными :)

  • Разве Wave не использует GWT-RPC для получения регулярных обновлений с сервера? Firefox отслеживает некоторую передачу JSON по проводам, но ничего похожего на RPC.

  • Как они действуют, например, при отправке нового вейвлета. Есть ли объект просмотра для каждой волны DTO, или они используют какой-то другой шаблон?

  • Как обновляется графический интерфейс после ответа, скажем, новой волны. Будет ли вся область с вейвлетами перерисовываться или использовать какие-нибудь умные методы, чтобы гарантировать, что только конкретный элемент был затронут?

Спасибо

1 Ответ

3 голосов
/ 15 октября 2010

Это, вероятно, информационная перегрузка, но, поскольку Google Wave является открытым исходным кодом, вы можете посмотреть, как они настраивают здесь .

Если вы, например, посмотрите на WaveView.java, вы увидите, что они используют шину событий на стороне клиента, как Рэй Райан упомянул в этом выступлении на Google IO 2009. Кажется, я помню, что видел другое видео, где они говорили об этих аспектах Google Wave:

  • Они используют систему событий для запуска событий, когда что-то происходит на стороне клиента. Система событий управляет связью с сервером, передавая информацию о событиях на сервер, получая события обратно с сервера и публикуя те события, которые возвращаются. Шина событий использует своего рода буфер, поэтому, если группа событий запускается в быстрой последовательности, они могут отправить их все в одном пакете. Например, когда прибывает новая волна, событие с информацией о волне будет запущено, и любые части пользовательского интерфейса, которые активно прослушивают это событие, будут уведомлены, чтобы они могли определить, нужно ли им изменить себя соответствующим образом.
  • Они использовали точки шва (или некоторые другие; я не помню названия), чтобы сделать так, чтобы GWT мог разбивать код на модули и загружать только те части, которые действительно должны быть использованы. Поскольку файл javascript wave ui изначально занимал более 1 МБ (уменьшенный и сжатый), это было очень важно.
  • Поскольку одновременно были видны только определенные волны и вейвлеты, они фактически использовали некоторые сложные методы для повторного использования одних и тех же элементов DOM. Поэтому, когда вы прокручиваете список своих волн вниз, он фактически берет элемент DOM, представляющий волну в верхней части вашего почтового ящика, изменяет информацию внутри и перемещает ее в нижнюю часть области прокрутки, оставляя пустое место в детали. области прокрутки, которую вы больше не видите.

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

...