Вы, наверное, примерно правы. Сайт знает, где находится ваш видовой экран, и загружает только видимую часть, в 16 "чанков" символа. DB просто сохраняет 16 строк символов с координатами x и y. Вы можете увидеть его обновление в блоках 1x16, если быстро перетащить.
Что касается отправки, если бы это был я, я бы кэшировал текст и отправлял только один 16-символьный "чанк" за раз. Каждый раз, когда происходит редактирование, проверьте, находится ли он в том же блоке, что и последний. Если нет, отправьте последний кусок и начните кэшировать новый.
Чтобы поддерживать актуальность представления, вы можете проверить его на наличие изменений в вашей области просмотра, посылая ajax-запрос каждые пару секунд с window.setInterval()
. Он может отослать обратно некоторый JSON или что-то еще только с частями, которые имеют изменения, возможно, закодированные с их расположением в сетке в первых нескольких символах.
Я просто машу рукой, я не смотрел на код, но вы правы. Это увлекательный сайт.
РЕДАКТИРОВАТЬ: Подробнее ...
Проверьте функцию init()
(строка 906 в yourworld.js). Это лучшая точка входа, если вы хотите изучить код. Вы можете увидеть, как редактирование работает в строке 953. В keydown
скрипт фокусирует скрытый элемент ввода, который ловит текст. Затем он использует обратный вызов на setInterval
, чтобы получать первый символ из поля ввода каждые 10 мс, а затем очищает поле. Если есть символ, он кэшируется в массиве и помещается в активную ячейку сетки. В комментарии он говорит, что это предотвращает вставку.
Массив правок отправляется каждые две секунды (строка 1017). Каждый символ ввода отправляется с позицией и отметкой времени.
fetchUpdates()
обрабатывает получение обновленных ячеек с сервера (строка 383). Он содержит запрос jQuery.ajax
с обратным вызовом при успешном завершении функции, которая вносит необходимые изменения и через 1 секунду setTimeout()
.
снова вызывает
fetchUpdates()
.