Как правильно разгрузиться/уничтожить ВИДЕО элемент

Я работаю над медиа в реальном времени, просматривающие/воспроизводящий приложение, которое использует <video> объекты в браузере для воспроизведения, когда доступно.

Я использую соединение прямого JavaScript и jQuery,

Мое беспокойство конкретно с памятью. Приложение никогда не перезагружает в окне, и пользователь может посмотреть много видео, таким образом, управление памятью становится большим беспокойством со временем. В тестировании сегодня, я вижу, что профиль памяти переходит размером видео, которое будет передано потоком с каждой последующей загрузкой и никогда не будет ронять вниз к базовой линии.

Я попробовал следующие вещи тем же результатом:

1 - Освободите родительский контейнер, содержащий созданный элемент, например:

$(container_selector).empty();

2 - Пауза и удаляет детей, соответствующих 'видео', и затем освобождает родительский контейнер:

$(container_selector).children().filter("video").each(function(){
    this.pause();
    $(this).remove();
});
$(container_selector).empty();

Кто-либо еще столкнулся с этой проблемой и является там лучшим способом сделать это?

46
задан sparkey0 15 July 2010 в 18:17
поделиться

2 ответа

Просто чтобы уточнить для тех, кто попробует это позже, решение было следующим: (подтверждено с видео h264 в Safari 5.0, в FF/opera пока не проверено)

$(container_selector).children().filter("video").each(function(){
    this.pause();
    delete(this);
    $(this).remove();
});
$(container_selector).empty();
3
ответ дан 26 November 2019 в 20:11
поделиться

Сообщается, что это «решение» работает, предположительно потому, что оно сделает эти объекты видеоконтейнера доступными для сборки мусора (см. Примечание ниже, где обсуждается, почему 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 .

Просто имейте в виду, если этот ответ решает вашу проблему, то, если он действительно работает, непонятно, почему это так, и с такой же вероятностью он перестанет работать по любому количеству причин.

17
ответ дан 26 November 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: