Я работаю над медиа в реальном времени, просматривающие/воспроизводящий приложение, которое использует <video>
объекты в браузере для воспроизведения, когда доступно.
Я использую соединение прямого JavaScript и jQuery,
Мое беспокойство конкретно с памятью. Приложение никогда не перезагружает в окне, и пользователь может посмотреть много видео, таким образом, управление памятью становится большим беспокойством со временем. В тестировании сегодня, я вижу, что профиль памяти переходит размером видео, которое будет передано потоком с каждой последующей загрузкой и никогда не будет ронять вниз к базовой линии.
Я попробовал следующие вещи тем же результатом:
1 - Освободите родительский контейнер, содержащий созданный элемент, например:
$(container_selector).empty();
2 - Пауза и удаляет детей, соответствующих 'видео', и затем освобождает родительский контейнер:
$(container_selector).children().filter("video").each(function(){
this.pause();
$(this).remove();
});
$(container_selector).empty();
Кто-либо еще столкнулся с этой проблемой и является там лучшим способом сделать это?
Просто чтобы уточнить для тех, кто попробует это позже, решение было следующим: (подтверждено с видео h264 в Safari 5.0, в FF/opera пока не проверено)
$(container_selector).children().filter("video").each(function(){
this.pause();
delete(this);
$(this).remove();
});
$(container_selector).empty();
Сообщается, что это «решение» работает, предположительно потому, что оно сделает эти объекты видеоконтейнера доступными для сборки мусора (см. Примечание ниже, где обсуждается, почему delete
не следует не имеет значения). В любом случае ваши результаты могут отличаться в зависимости от браузера:
$(container_selector).children().filter("video").each(function(){
this.pause(); // can't hurt
delete this; // @sparkey reports that this did the trick (even though it makes no sense!)
$(this).remove(); // this is probably what actually does the trick
});
$(container_selector).empty();
Примечание: Нет сомнений в том, что ключевое слово delete
указано только для удаления свойств из объектов (как другие указывали в Комментарии). Запись этого
в консоль до и после строки удалить эту
выше, каждый раз показывает один и тот же результат. удалить это
не должно ничего делать и не имеет значения. Тем не менее, этот ответ продолжает получать небольшое количество голосов, и люди сообщают, что пропуск удалить это
приводит к тому, что он перестает работать. Возможно, есть странность в том, как некоторые браузерные JS-движки реализуют delete
, или необычное взаимодействие между delete
браузера и тем, что jQuery делает с this
.
Просто имейте в виду, если этот ответ решает вашу проблему, то, если он действительно работает, непонятно, почему это так, и с такой же вероятностью он перестанет работать по любому количеству причин.