Таймер для нескольких магазинов
Всем привет!
Реализовал на своем сайте таймер с добавлением 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 код под новые условия. А время запрашиваю на сервере, потому что у пользователей часы могут быть настроены по разному. |
arkadii_parovozov,
А что такое - каждый блок? чем они различаются? Как time_server.php отличит, кому сколько минут добавлять? Как function(data) различит, куда какой результат писать? |
А что такое - каждый блок? - блоков может быть сколько угодно, каждый блок содержит в себе информацию о конкретном магазине.
чем они различаются? - для пользователя - контентом, для браузера - 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 но хотелось бы обойтись одной функцией... |
arkadii_parovozov,
Это вы генерите в странице для каждого блока свой скрипт. Теперь представьте не индивидуальный скрипт, а универсальный, Крутится setInterval. По идее, time_server.php должен получать полный перечень индексов блоков с временным сдвигом и возвращать массив сразу для всех блоков - с конкретным индексом блока, датой и временем - и в функции нужно раскидывать полученный массив по всем блокам. Как-то так. |
Ну да. Теперь вопрос в том, что лучше, посылать на сервер 10 000 запросов каждую секунду или посылать один запрос а обрабатываться он будет в 10 000 раз медленнее...
Наверное так оставлю. Буду создавать для каждого блока свой скрипт. |
arkadii_parovozov,
А зачем вам 10 000 запросов (и еще 10 000 setInterval) или 10 000 обработок? У вас что, на странице 10 000 блоков с датой и временем? что это за страница такая? Для кого? |
Естественно столько магазинов выводить на страницу никто не будет, это я так, размышляю, чисто гипотетический... Хотя, если представить что у меня в базе 1 000 000 магазинов, и я их всех вывожу в карту сайта, то....
|
arkadii_parovozov,
Представьте себе на карте на экране десктопа (не говорю о смартфоне) 1000000 точек размером хотя бы в 1 пиксел... что там от карты останется? А если хотя бы 100 блоков дата-время одновременно вывести на экран... Подумайте над тем, что, когда и как вы отображаете - и, мне кажется, много объектов одновременно не понадобится Подавать запросы по мере появления объекта на экране. |
Не знаю актуальна ли данная тема...
Сдвиг времени для каждого блока можно затолкать в data-атрибут каждого из блоков с "часами". Далее с сервера можно запросить текущее время, пробежаться по всем блокам с часами прибавляя к полученному с сервера значению сдвиг из data-атрибута. После остается только перезаписать дату-время в блоках. Не подходит? |
О! Вот эта хорошая идея. Запрашивать только дату у сервера, а потом скриптом прибавлять сдвиг времени уже на клиенте.
Схема получается примерно такая: <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-шником? И еще вопрос: много ли ресурсов будет потреблять этот скрипт на клиенте? |
Часовой пояс GMT +3, время: 23:03. |