Епизод 2 .
За тези които не са запознати с първа част предоставям резюме.
Имам queue което изпълнява задачи. Използвам delay за да забавя изпълнението на задачите определено време. Независимо от queue-то имам jquery брояч, който използвам да визуализирам времето оставащо до изпълнението на задачите. След като изтече времето с javascript рефрешвам страницата за да се актуализират промените в базата данни.
Тук ще отбележа някои подробности. Инсталирах си PHP-Vars-To-Js-Transformer, който се оказа супер удобен. Подавам в един обект променливи, които после си използвам в javascript без да правя никакви врътки и щуротии .
Стигаме до настоящия проблем. Получава се рзлика около секунда и половина между queue-то и jquery брояч-а. Queue-то е по-бавно, и рефреша се изпълнява преди да са се случили промените в базата. За това реших да забавя рефреша чрез setTimeout с две секунди. Всичко е наред ако не се рефрешва ръчно страницата, иначе на всеки рефреш тези две секунди се натрупват по някакъв начин. По принцип съм готов и на различно решение на проблема.
Нека да кажа малко и за времената.
Queue-то приема число(секунди) за delay-а. Например 20 е давадесет секунди.
Докато jquery брояч-а приема дата. Например 2018/05/25 20:10:25.
Накрая setTimeout-а приема число(милисекунди). Например 2000 е две секунди.
Ето и как подавам променливите.
За queue-то просто си взимам левела на сградата от базата и според него сетвам секундите.
За setTimeout-а по същия начин, с тази разлика че неговата променлива я слагам и в javascript обекта.
За jquery брояч-а е малко по-сложно. Във метода където се извършва ъпдейта на базата, използвам redis за да записвам крайната дата (само когато е натиснат бутона), слад което го подавам на javascript обекта.
Ето и как стигам до точното число. Няма да обяснявам подробно, от кода се разбира.
Еми това е в общи линии. Ето и javascript-a.
За тези които не са запознати с първа част предоставям резюме.
Имам queue което изпълнява задачи. Използвам delay за да забавя изпълнението на задачите определено време. Независимо от queue-то имам jquery брояч, който използвам да визуализирам времето оставащо до изпълнението на задачите. След като изтече времето с javascript рефрешвам страницата за да се актуализират промените в базата данни.
Тук ще отбележа някои подробности. Инсталирах си PHP-Vars-To-Js-Transformer, който се оказа супер удобен. Подавам в един обект променливи, които после си използвам в javascript без да правя никакви врътки и щуротии .
Стигаме до настоящия проблем. Получава се рзлика около секунда и половина между queue-то и jquery брояч-а. Queue-то е по-бавно, и рефреша се изпълнява преди да са се случили промените в базата. За това реших да забавя рефреша чрез setTimeout с две секунди. Всичко е наред ако не се рефрешва ръчно страницата, иначе на всеки рефреш тези две секунди се натрупват по някакъв начин. По принцип съм готов и на различно решение на проблема.
Нека да кажа малко и за времената.
Queue-то приема число(секунди) за delay-а. Например 20 е давадесет секунди.
Докато jquery брояч-а приема дата. Например 2018/05/25 20:10:25.
Накрая setTimeout-а приема число(милисекунди). Например 2000 е две секунди.
Ето и как подавам променливите.
За queue-то просто си взимам левела на сградата от базата и според него сетвам секундите.
За setTimeout-а по същия начин, с тази разлика че неговата променлива я слагам и в javascript обекта.
PHP:
if ($mines_levels[0]['gold_mine'] == 0)
{
$this->_num = 5; // За queue-то
$this->_jsNum = 7000; // За setTimeout-а
}
PHP:
$this->_redis->set('endDate', $this->_endDate);
PHP:
date_default_timezone_set('Europe/Sofia');
$this->_date = strtotime(date('Y-m-d H:i:s')) + $this->_num;
$this->_endDate = date("Y-m-d H:i:s", $this->_date);
$this->_goldMineTime = $this->_redis->get('endDate');
Еми това е в общи линии. Ето и javascript-a.
PHP:
// goldMineTime e датата за таймера
$('#clock').countdown(goldMineTime, function (event) {
var totalHours = event.offset.totalDays * 24 + event.offset.hours;
$(this).html(event.strftime(totalHours + ' h. %M m. %S s.'));
});
// jsNum е времето за setTimeout-а
var timeoutHandle = window.setTimeout(location.reload.bind(location), jsNum);
$('div#clock').countdown(goldMineTime).on('stop.countdown', timeoutHandle);