Эксперимент: твиты на карте в реальном времени

Решил провести эксперимент с API яндекс карт и проверить, насколько производительным будет веб-приложение, если быстро добавлять и удалять большое количество меток на карту. Чтобы приблизить ситуацию к реальной, данные было решено не "выдумывать", а где-то брать. Идеальным кандидатом стал твиттер, где ежесекундно появляются сотни новых сообщений.

Так и родилась идея нового мини-приложения. Чтоб не тянуть кота за хвост, сразу покажу, что получилось: https://twtrmap.herokuapp.com/ (проект размещён на бесплатном тарифе Heroku, где приложения "засыпают" при бездействии; поэтому если при первом входе оно "подумает" секунд 10 — это нормально).

А вот гифка для тех, кому лень переходить по ссылкам (или если демка вдруг перестала работать):

demo.gif

Делалось на NodeJS, т.к. под неё были доступны удобные библиотеки и она лучше подходит для real-time режима, чем традиционный для меня PHP.

Принцип работы такой:

  1. При запуске загружается карта и параллельно устанавливается socket-соединение с сервером. Когда карта готова и соединение установлено, браузер сообщает на сервер, в каких границах пользователь видит карту
  2. С помощью Stream API мы устанавливаем соединение с сервером Твиттера и "просим" присылать нам все твиты, у которых есть геометка в заданном квадрате
  3. Когда на сервер приходит новый твит, мы немедленно отправляем его в браузер, где на основе геометки отображаем точку на карте (и удаляем её спустя 800 мс)
  4. Если пользователь передвинул карту или изменил масштаб, Stream API перезапускается с новыми границами

Вначале ещё была идея отображать тексты твитов в каком-то потоке рядом с картой, но твиты приходят так быстро, что в таком водопаде прочитать что-то трудно.

Кому интересны детали реализации, исходный код проекта опубликован и доступен для ознакомления и переиспользования.

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

Если у вас после просмотра появились вопросы или идеи, как можно извлечь из подобного инструмента реальную пользу, напишите мне. Всё будет обязательно прочитано и отвечено.