19.04.2017, 10:14
|
Кандидат Javascript-наук
|
|
Регистрация: 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 код под новые условия.
А время запрашиваю на сервере, потому что у пользователей часы могут быть настроены по разному.
|
|
19.04.2017, 18:55
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
arkadii_parovozov,
А что такое - каждый блок? чем они различаются? Как time_server.php отличит, кому сколько минут добавлять?
Как function(data) различит, куда какой результат писать?
|
|
20.04.2017, 12:34
|
Кандидат Javascript-наук
|
|
Регистрация: 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
но хотелось бы обойтись одной функцией...
|
|
20.04.2017, 15:04
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
arkadii_parovozov,
Это вы генерите в странице для каждого блока свой скрипт.
Теперь представьте не индивидуальный скрипт, а универсальный,
Крутится setInterval.
По идее, time_server.php должен получать полный перечень индексов блоков с временным сдвигом и возвращать массив сразу для всех блоков - с конкретным индексом блока, датой и временем - и в функции нужно раскидывать полученный массив по всем блокам.
Как-то так.
|
|
20.04.2017, 16:07
|
Кандидат Javascript-наук
|
|
Регистрация: 24.11.2016
Сообщений: 101
|
|
Ну да. Теперь вопрос в том, что лучше, посылать на сервер 10 000 запросов каждую секунду или посылать один запрос а обрабатываться он будет в 10 000 раз медленнее...
Наверное так оставлю. Буду создавать для каждого блока свой скрипт.
|
|
20.04.2017, 16:19
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
arkadii_parovozov,
А зачем вам 10 000 запросов (и еще 10 000 setInterval) или 10 000 обработок?
У вас что, на странице 10 000 блоков с датой и временем? что это за страница такая? Для кого?
|
|
20.04.2017, 17:39
|
Кандидат Javascript-наук
|
|
Регистрация: 24.11.2016
Сообщений: 101
|
|
Естественно столько магазинов выводить на страницу никто не будет, это я так, размышляю, чисто гипотетический... Хотя, если представить что у меня в базе 1 000 000 магазинов, и я их всех вывожу в карту сайта, то....
|
|
20.04.2017, 18:05
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
arkadii_parovozov,
Представьте себе на карте на экране десктопа (не говорю о смартфоне) 1000000 точек размером хотя бы в 1 пиксел... что там от карты останется?
А если хотя бы 100 блоков дата-время одновременно вывести на экран...
Подумайте над тем, что, когда и как вы отображаете - и, мне кажется, много объектов одновременно не понадобится
Подавать запросы по мере появления объекта на экране.
|
|
20.04.2017, 21:53
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,800
|
|
Не знаю актуальна ли данная тема...
Сдвиг времени для каждого блока можно затолкать в data-атрибут каждого из блоков с "часами". Далее с сервера можно запросить текущее время, пробежаться по всем блокам с часами прибавляя к полученному с сервера значению сдвиг из data-атрибута. После остается только перезаписать дату-время в блоках.
Не подходит?
|
|
22.04.2017, 15:29
|
Кандидат Javascript-наук
|
|
Регистрация: 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-шником?
И еще вопрос: много ли ресурсов будет потреблять этот скрипт на клиенте?
|
|
|
|