Утечка памяти в плагине для 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 менял на новую не помогло. |
Часовой пояс GMT +3, время: 15:23. |