Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.04.2017, 10:14
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Таймер для нескольких магазинов
Всем привет!

Реализовал на своем сайте таймер с добавлением 30 минут к текущему времени таким образом:
setInterval (
   function ()
   {
		$.post( 'include/time_server.php', {'time_new':'1'}, 
			function(data){
				var arr_time = data.split(' ');
				$('.data').val(arr_time[0]);
				$('.time').val(arr_time[1]);
		});
   },
1000);

В файле time_server.php прибавляю 30 минут к текущему времени и вывожу на главной странице (в блоки с классами data и time) ajax-ом. Суть в том что блоков с блоками data и time может быть сколько угодно. И пока мне нужно прибавлять ко всем блокам одинаковое количество минут(30), то все работает нормально, а сейчас возникла необходимость каждому блоку прибавлять разное количество минут(10, 15, 45, 90, ...).

Но не знаю как это реализовать. Не хотелось-бы каждому блоку выводить циклом отдельный js код, ведь этих блоков может быть сколько угодно. Как переделать мой js код под новые условия.

А время запрашиваю на сервере, потому что у пользователей часы могут быть настроены по разному.
Ответить с цитированием
  #2 (permalink)  
Старый 19.04.2017, 18:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

arkadii_parovozov,
А что такое - каждый блок? чем они различаются? Как time_server.php отличит, кому сколько минут добавлять?
Как function(data) различит, куда какой результат писать?
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2017, 12:34
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

А что такое - каждый блок? - блоков может быть сколько угодно, каждый блок содержит в себе информацию о конкретном магазине.

чем они различаются? - для пользователя - контентом, для браузера - id-шником.

Как time_server.php отличит, кому сколько минут добавлять? - можно этот параметр записывать в time_new.

Как function(data) различит, куда какой результат писать? - если бы я знал ответ на этот вопрос, то я бы тему не открывал.

Сейчас я решаю этот вопрос таким образом:
?>
<script>
	setInterval (
		function ()
		 {
			$.post( 'include/time_server.php', {'time_new':'<?php echo $row['time']?>'}, 
				function(data){
					var arr_time = data.split(' ');
					$('#data_<?php echo $row['id']?>,#2data_<?php echo $row['id']?>').val(arr_time[0]);
					$('#time_<?php echo $row['id']?>,#2time_<?php echo $row['id']?>').val(arr_time[1]);
				});
		},
	1000);
</script>
<?php

но хотелось бы обойтись одной функцией...
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2017, 15:04
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

arkadii_parovozov,
Это вы генерите в странице для каждого блока свой скрипт.

Теперь представьте не индивидуальный скрипт, а универсальный,
Крутится setInterval.
По идее, time_server.php должен получать полный перечень индексов блоков с временным сдвигом и возвращать массив сразу для всех блоков - с конкретным индексом блока, датой и временем - и в функции нужно раскидывать полученный массив по всем блокам.
Как-то так.
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2017, 16:07
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Ну да. Теперь вопрос в том, что лучше, посылать на сервер 10 000 запросов каждую секунду или посылать один запрос а обрабатываться он будет в 10 000 раз медленнее...

Наверное так оставлю. Буду создавать для каждого блока свой скрипт.
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2017, 16:19
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

arkadii_parovozov,
А зачем вам 10 000 запросов (и еще 10 000 setInterval) или 10 000 обработок?
У вас что, на странице 10 000 блоков с датой и временем? что это за страница такая? Для кого?
Ответить с цитированием
  #7 (permalink)  
Старый 20.04.2017, 17:39
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Естественно столько магазинов выводить на страницу никто не будет, это я так, размышляю, чисто гипотетический... Хотя, если представить что у меня в базе 1 000 000 магазинов, и я их всех вывожу в карту сайта, то....
Ответить с цитированием
  #8 (permalink)  
Старый 20.04.2017, 18:05
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

arkadii_parovozov,
Представьте себе на карте на экране десктопа (не говорю о смартфоне) 1000000 точек размером хотя бы в 1 пиксел... что там от карты останется?
А если хотя бы 100 блоков дата-время одновременно вывести на экран...
Подумайте над тем, что, когда и как вы отображаете - и, мне кажется, много объектов одновременно не понадобится
Подавать запросы по мере появления объекта на экране.
Ответить с цитированием
  #9 (permalink)  
Старый 20.04.2017, 21:53
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,800

Не знаю актуальна ли данная тема...
Сдвиг времени для каждого блока можно затолкать в data-атрибут каждого из блоков с "часами". Далее с сервера можно запросить текущее время, пробежаться по всем блокам с часами прибавляя к полученному с сервера значению сдвиг из data-атрибута. После остается только перезаписать дату-время в блоках.

Не подходит?
Ответить с цитированием
  #10 (permalink)  
Старый 22.04.2017, 15:29
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

О! Вот эта хорошая идея. Запрашивать только дату у сервера, а потом скриптом прибавлять сдвиг времени уже на клиенте.

Схема получается примерно такая:
<div class="magazin">
	<div class="bloki" id="<?php echo $row['id']."_data_".$row['time']?>"></div>
	<div class="bloki" id="<?php echo $row['id']."_time_".$row['time']?>"></div>
</div>

и таких блоков может быть сколько угодно. Получается, скриптом нужно парсить все классы bloki потом вырезать из id "$row['time']" потом прибавлять к времени сервера это значение и выводить обратно в блок с текущем id-шником?

И еще вопрос: много ли ресурсов будет потреблять этот скрипт на клиенте?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер для нескольких id nekada Общие вопросы Javascript 11 21.02.2017 10:03
Скрипт не работает для нескольких объектов smart-create Events/DOM/Window 10 05.01.2017 00:44
подскажите пожалуйста эффекты для показа нескольких блоков по скроллу greenwar jQuery 12 09.09.2014 19:50
HTA-приложение для радио Pianorama Magneto Ваши сайты и скрипты 42 22.01.2012 08:34