Задать вопрос
@Redrik_Shuhart

Как оптимизировать скрипт?

На странице более сотни div-ов с атрибутом data-countdown, в нём хранится дата в UTC, с помощью jquery и moment.js прохожу по всем дивам и вешаю счетчик с обратным отсчетом (countdown). На компьютере проблем нет, но на смартфоне при большом количестве счётчиков начинает подтормаживать прокрутка.
Можно ли как-то оптимизировать скрипт? Пример на jsfiddle

<div data-countdown="2019/01/01"></div>
<div data-countdown="2018/01/01"></div>
<div data-countdown="2018/10/01"></div>
<div data-countdown="2018/12/01"></div>
<div data-countdown="2018/12/01"></div>
...


$('[data-countdown]').each(function() {
		var $this = $(this), nextDrawDate = moment.utc($(this).data('countdown')).toDate();
		$this.countdown(nextDrawDate, function (event) {
			str = '';
			if (event.strftime('%D') == 0) {
				str = '';
			}
			if (event.strftime('%D') == 1) {
				str = '%-D день<br>';
			}
			if (event.strftime('%D') > 1 & event.strftime('%D') < 5) {
				str = '%-D дня<br>';
			}
			if (event.strftime('%D') >= 5) {
				str = '%-D дней<br>';
			}

			if(event.strftime('%D') == 0 & event.strftime('%H') == 0 & event.strftime('%M') == 0 & event.strftime('%S') == 0){
				$(this).html('<span class="is-size-7">Время кончилось</span>');
			}
			else {

				if(event.strftime('%D') == 0 & event.strftime('%H') == 0 & event.strftime('%M')<30){

					if(event.strftime('%S') % 2 == 0){
						$(this).html(event.strftime(str + '%H:%M:%S'));
					}
					else {
						$(this).html('<span class="is-size-7" style="color:#db361c;">Время кончается</span>');
					}

				}
				else {
					$(this).html(event.strftime(str + '%H:%M:%S'));
				}
			}
		});
	});
  • Вопрос задан
  • 111 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...

основная проблема тут: https://github.com/hilios/jQuery.countdown/blob/ma...
strftime очень тяжелая, а Вы ее дергаете на каждый чих
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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