Сохранить текущее время HTML5-видео перед тем, как пользователь покинет или закроет страницу

Я хотел бы сохранить позицию currentTime видео HTML5 в базе данных, когда пользователь покидает веб-страницу. Похоже, что window.onbeforeunload - ненадежный способ сделать это (не говоря уже о том, что он дает нежелательное всплывающее окно!). Есть лучший способ сделать это?

Я не могу думать ни о чем, кроме периодического сохранения позиции на сервере. Но это кажется расточительным с точки зрения ресурсов / пропускной способности. Netflix, похоже, хорошо запоминает вашу последнюю просмотренную позицию. Как они смогут добиться этого надежно? Может быть, низкоуровневый код C / C ++ на стороне сервера?


person poweratom    schedule 26.07.2012    source источник
comment
Есть ли способ обойти базу данных? Вам нужна позиция на нескольких сайтах или будет достаточно файла cookie / localStorage домена? Если вам действительно нужна база данных, вы можете сохранять позицию каждые 15 секунд или около того. Полезная нагрузка не такая большая, если вы просто передаете идентификатор и временной код. Однако это может быть обузой, если в вашем домене много куков (которые отправляются с каждым запросом).   -  person Torsten Walter    schedule 27.07.2012
comment
Это на сайте, который я полностью контролирую, со всеми размещенными там видео. Нет проблем с несколькими сайтами; таким образом, localStorage / cookie достаточно хорош. Это сделано по аналитическим причинам (в этот момент люди, скорее всего, откажутся от конкретного видео и т. Д.). Возможно, мне не нужно точное место, куда уходят пользователи. Выборка из достаточно большой коллекции должна дать мне приблизительное представление. Я буду стараться сохранять каждые 10-15 секунд и посмотреть, как бэкэнд с этим справится. Пожалуйста, измените приведенное выше предложение, и я помечу его как полученный. Спасибо.   -  person poweratom    schedule 27.07.2012
comment
Я обновил свой ответ. Тогда cookie звучит для вас как хорошее решение. Сохраните текущее время и обновите статистику при последующих посещениях. Вы также можете использовать Google Analytics для отслеживания настраиваемого события, которое включает эти данные.   -  person Torsten Walter    schedule 27.07.2012


Ответы (1)


Есть разные способы сохранить такие вещи:

Локально (для того же домена)

перед выгрузкой

Это дает вам возможность отменить событие выгрузки, если хотите. Однако всплывающее окно необязательно.

разгрузить

Это событие нельзя отменить, но у вас по-прежнему есть полный доступ ко всем узлам и переменным JavaScript. Таким образом, вы можете выполнить окончательную очистку / сохранить, если отмена не требуется. Вы можете использовать любой способ сохранения, например document.cookie или window.localStorage.

window.onunload = function () {
    window.localstorage[myVideo.currentTime] = document.getElementById("myVid").currentTime;
}

Если вы можете справиться с тем фактом, что вы можете обрабатывать файлы cookie и localStorage только тогда, когда пользователь возвращается на ваш сайт. Думаю, такой подход был бы идеальным. Вы просто сохраняете текущее время, и при следующем посещении пользователем вы получите обновленную информацию.

На бэкэнде

Если вам действительно нужно сохранить эту информацию на сервере, вы можете попробовать другие вещи.

Опрос БД

В зависимости от ваших требований к точности вы можете отправлять ajax-запрос каждые 10-20 секунд для обновления времени воспроизведения. Если вы просто включите идентификатор видео и текущее время, запрос будет настолько маленьким, что не повлияет на производительность. Однако имейте в виду, что если у вас много файлов cookie домена, это может значительно увеличить размер запросов, и ваши 500-байтовые полезные данные могут иметь заголовок 5 КБ.

person Torsten Walter    schedule 26.07.2012
comment
Спасибо. Я немного отредактировал вопрос, чтобы уточнить мои намерения. Мне действительно нужно сохранить эту переменную в db через ajax ... поэтому я надеялся, что будет способ завершить вызов перед тем, как покинуть страницу (но без приглашения beforeunload). Но то, что вы предложили, работает до тех пор, пока я сохраняю переменную в объекте window и обрабатываю ее на следующей странице с помощью глобального сценария для обнаружения существования переменной. Однако это не сработает, если пользователь покинет сайт. Мысли? - person poweratom; 27.07.2012