Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2013, 16:22
Новичок на форуме
Отправить личное сообщение для TheWanderer Посмотреть профиль Найти все сообщения от TheWanderer
 
Регистрация: 01.12.2008
Сообщений: 8

Утечка памяти в плагине для jQuery.
Здравствуйте.

На днях пришлось написать свой плагин для jQuey для отсчета времени.
К сожалению, готовые решения не подошли по тем или иным причинам.
И поэтому пришлось писать свой плагин. И как обычно первый блин вышел комом.
А точнее имеется утечка памяти и только в Chrome это “чудо” хоть как то работает. В остальных браузерах он немного работает, а потом намертво умирает.

html страница где это нам все показывается:
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="./mod/jquery/jquery-1.4.2.js"></script>
    <script type="text/javascript" src="js/myCountdownPlugin.js"></script>
</head>
<body>
    <script type="text/javascript">
        $(document).ready(function(){
            $(this).myCountDownPlugin({elClass:'timers'});
        })
    </script>
    <div class="timers" data-time="11 Dec 2013 12:54:00" data-id="1">Счетчик 1</div>
    <div class="timers" data-time="29 Nov 2013 11:12:13" data-id="2">Счетчик 2</div>
    <div class="timers" data-time="28 Nov 2012 15:15:00" data-id="3">Счетчик 3</div>
</body>
</html>

Вот сам js:
(function(){
    var dataElement = new Array();

    var methods = {
        init:function(settings){
            $('.'+settings.elClass).each(function() {
                dataElement.push(Array($(this), $(this).attr('data-time')));
            })
            methods.countDown();
        },
        countDown:function(){
            if(dataElement.length >= 1)
            {
                for(var i = 0; i < dataElement.length; i++)
                {
                    var end = new Date(dataElement[i][1]);
                    var now = new Date();
                    var distance = end.getTime()-now.getTime();

                    if(distance > 0)
                    {
                        var days = Math.floor(distance/86400000);
                        var hour = Math.floor((distance%86400000)/3600000);
                        var minute = Math.floor((distance%3600000)/60000);
                        var second = Math.floor((distance%60000)/1000);
                        var mseconds = Math.floor(distance%1000);

                        dataElement[i][0].text('Дней: '+days+' Часов:'+hour+' Минуты:'+minute+' Секунды:'+second+' Милесекунды: '+mseconds);
                    }
                    else if(distance < 0)
                    {
                        methods.timeIsUp(i);
                    }
                }
                setInterval(function(){methods.countDown()}, 150);
            }
        },
        timeIsUp:function(param){
            dataElement[param][0].text('Время вышло');
            dataElement.splice(param, 1);
        }
    };

    $.fn.myCountDownPlugin = function(options, method) {
        var settings = $.extend({
            'time' : null,
            'id': null,
            'elClass': null
        }, options);

        if ( methods[method] ) {
            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init(settings);
        } else {
            $.error( 'Метод "' +  method + '" не найден в плагине jQuery.myCountdownPlugin' );
        }
    }
})(jQuery);

Я даже подозреваю, что утечка происходит между 14-35 строкой. И скорее всего наверно утечка происходит на 35 стр.
Только не могу понять, как исправить утечку. Не подскажите люди добрые?

P.S: библиотеку jquery менял на новую не помогло.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
Создание плагина для jQuery 1.9.1 (Sandr) jQuery 8 08.03.2013 19:18
jQuery поменять CSS цвет для текста при наведении мышью (.text:hover) JooZ jQuery 16 15.11.2010 19:56
Как происходит утечка памяти в даном случае? Yazla Общие вопросы Javascript 2 09.11.2009 13:02
jQuery для начинающих! kalisha jQuery 5 21.11.2008 01:06