javascript — должен ли мой код пропускать память?

#javascript #memory-leaks #jwplayer

#javascript #утечки памяти #jwplayer

Вопрос:

Если я вызываю эту функцию много раз, должна ли она пропускать память?

Одна вещь вызвала у меня подозрение: здесь я назначаю instance player. У проигрывателя есть слушатели — onPlay и другие. Итак, когда я запускаю функцию playJW, она выполняет все. И поэтому эти слушатели работают после завершения выполнения функции. Я знаю, что они работают после выполнения функции, потому что видеофайл выполняется намного больше времени, чем требуется для выполнения функции.

Итак, если я вызываю эту функцию много раз — создается много копий этих слушателей или как это работает?

 this.playJW = function(vid) {

    $('#jwplayer').show();

    // this was file name with .avi , we need only beggining
    vid = vid.split('.');

    var folder = /dogs6_4mb/;       
    if(this._isMobile()) {          
        folder = '/dogs6_2mb/';
    }

    var player = jwplayer('jwplayer').setup({
        file: video_files_url   folder   vid[0]   '.mp4',
        height: '100%',     
        width: '100%',
        controls: true,
        autostart: true    
    });

    this.isPlaying = false;

    player.onPlay(function() {
        player.setControls(false);
        // to make not pause on display click
        self.isPlaying = true;          
    });

    player.onDisplayClick(function() {
        if (!isPlaying) {
            player.play();              
            self.isPlaying = true;              
        }
    });

    player.onComplete(function() {
        $('#jwplayer').hide();
    });     
};
  

Я попытался проверить использование памяти с помощью инструментов разработчика — в первый раз показалось, что она немного увеличивается, до 11 МБ, затем я обновил страницу, а также отключил плагины chrome. Теперь размер веб-страницы не превышает 12,4 МБ. Но тестирование не заняло много времени.

Я хочу понять, очищены ли эти слушатели каким-то образом и как браузер узнает, что они больше не используются?

Обновить:

http://jsfiddle.net/e9dRt/3/

Комментарии:

1. У вас есть пример этого, запущенный для отладки?

2. К сожалению, нет, я не уверен, но тестовая версия jwplayer может иметь ограничение на количество воспроизведений. Но если действительно нужно, возможно, позже я мог бы сделать на jsfiddle.

3. Не существует тестовой версии JW Player с ограничением на воспроизведение. Если бы вы могли установить jsfiddle, это было бы здорово.

4. да, моя ошибка, заметил, что на сайте jwplayer, насколько я понимаю, воспроизводится ограничение в 500 размещенных файлов. Также создан jsfiddle.

5. Ах, да, это правда, наш бесплатный хостинг также ограничивает это.