Это, вероятно, информационная перегрузка, но, поскольку Google Wave является открытым исходным кодом, вы можете посмотреть, как они настраивают здесь .
Если вы, например, посмотрите на WaveView.java, вы увидите, что они используют шину событий на стороне клиента, как Рэй Райан упомянул в этом выступлении на Google IO 2009. Кажется, я помню, что видел другое видео, где они говорили об этих аспектах Google Wave:
- Они используют систему событий для запуска событий, когда что-то происходит на стороне клиента. Система событий управляет связью с сервером, передавая информацию о событиях на сервер, получая события обратно с сервера и публикуя те события, которые возвращаются. Шина событий использует своего рода буфер, поэтому, если группа событий запускается в быстрой последовательности, они могут отправить их все в одном пакете. Например, когда прибывает новая волна, событие с информацией о волне будет запущено, и любые части пользовательского интерфейса, которые активно прослушивают это событие, будут уведомлены, чтобы они могли определить, нужно ли им изменить себя соответствующим образом.
- Они использовали точки шва (или некоторые другие; я не помню названия), чтобы сделать так, чтобы GWT мог разбивать код на модули и загружать только те части, которые действительно должны быть использованы. Поскольку файл javascript wave ui изначально занимал более 1 МБ (уменьшенный и сжатый), это было очень важно.
- Поскольку одновременно были видны только определенные волны и вейвлеты, они фактически использовали некоторые сложные методы для повторного использования одних и тех же элементов DOM. Поэтому, когда вы прокручиваете список своих волн вниз, он фактически берет элемент DOM, представляющий волну в верхней части вашего почтового ящика, изменяет информацию внутри и перемещает ее в нижнюю часть области прокрутки, оставляя пустое место в детали. области прокрутки, которую вы больше не видите.
Кроме того, я почти уверен, что они используют что-то вроде Comet с JSONP для поддержания непрерывной связи с сервером, поэтому они не опрашивают сервер постоянно на предмет новых обновлений, а скорее загружают динамически генерируемый файл javascript постепенно с сервера, который содержит инструкции для запуска любых событий, которые сервер решил запустить.