Вопрос о setInterval ()

  • 43 Ответов
  • 900 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

hamo

  • ***
  • 38
  • 1
Вопрос о setInterval ()
« : 13.02.2016, 15:48:21 »
Написал на php код который обращаеться к базе данных. Php файл запускается с помощью setInterval(function() {$('#myClass').load("new.php");}, 5000); . Этот скрипт будет запускаться на Joomle в материалах с доступом на 3 человека. Вопрос могут ли произойти сбои или зависания из за  3 постоянных (5000 млс ) обращения к серверу ? и еще как можно отключить setInterval() если человек перешел на другую страницу...

Заранее спасибо за помощь ! (я чайник если что то  ;D ;D ;D)

*

dmitry_stas

  • ********
  • 9651
  • 929
Re: Вопрос о setInterval ()
« Ответ #1 : 13.02.2016, 17:25:21 »
очень размытый вопрос. одно дело, если у вас new.php выполняется 1/100000 секунды, и совсем другое дело, если он выполняется скажем 10 секунд.
в целом, судя по написанному, подход скорее всего выбран неверный.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #2 : 13.02.2016, 18:27:11 »
php выбирает столбцы из базы данных и печатает. Интервал будет примерно где то 30 секунд или 1 минута.
будет печататься у 3 их людей .

как отключать  setInterval  при переходе на другую страницу и после возвращения   включать?

*

dmitry_stas

  • ********
  • 9651
  • 929
Re: Вопрос о setInterval ()
« Ответ #3 : 13.02.2016, 18:56:44 »
вы имеете в виду "при переходе на другую страницу" - это не собственно переход, а просто переключение между вкладками?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #4 : 13.02.2016, 19:06:27 »
да да

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #5 : 13.02.2016, 19:07:54 »
если он смотрит этот материал сетинтервал работал, если он переключился на другой материал чтоб сетинтервал не работал   

Re: Вопрос о setInterval ()
« Ответ #6 : 13.02.2016, 19:14:50 »
Его нельзя поставить на паузу - можно только выключить при событии blur и включить опять при событии focus. Для чего это нужно? Похоже на г-код.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #7 : 13.02.2016, 19:42:21 »
пускай  остановиться и заного включиться. как написать код?

Re: Вопрос о setInterval ()
« Ответ #8 : 13.02.2016, 19:48:30 »
Код
var interval = setInterval(...)
Код
$(window).on('blur', function(){
    clearInterval(interval)
})
Код
$(window).on('focus', function(){
    interval = setInterval(...)
})
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

buyanov

  • ***
  • 178
  • 26
  • Сайты 74
Re: Вопрос о setInterval ()
« Ответ #9 : 13.02.2016, 19:54:19 »
Этот скрипт будет запускаться на Joomle в материалах с доступом на 3 человека. Вопрос могут ли произойти сбои или зависания из за  3 постоянных (5000 млс ) обращения к серверу ? и еще как можно отключить setInterval() если человек перешел на другую страницу...
Никогда так не делайте.
Вообще никогда...
Даже если очень хочется.

Используйте сокеты или лонг-поллинг. К тому же постоянные запросы к БД будут грузить базу, еще хуже то, что PHP будет хавать память. Можно конечно взять сервак и тд. Но сам подход не очень.
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг

*

zomby6888

  • ******
  • 1484
  • 167
Re: Вопрос о setInterval ()
« Ответ #10 : 13.02.2016, 20:03:15 »
Большинство AJAX чатов так работает. Это не круто конечно, но сервер/БД не умрет если его каждые 5 секунд будут запрашивать, иначе что это за сервер такой?
« Последнее редактирование: 13.02.2016, 20:12:57 от zomby6888 »
интернет-блог: http://websiteprog.ru

*

buyanov

  • ***
  • 178
  • 26
  • Сайты 74
Re: Вопрос о setInterval ()
« Ответ #11 : 13.02.2016, 20:12:32 »
Большинство AJAX чатов так работает. Это не круто конечно, но сервер/БД не умрет если его каждые 5 секунд будут запрашивать
То что большинство так работает это не показатель - это раз. Если человеку оторвать ногу он тоже не умрет - это два.
Есть берешься что-то сам написать то сначала надо посмотреть то что уже написано сообществом, и если по каким-то причинам все не подошло пишем все грамотно, тогда и проблем не возникнет.
Я не в обиду просто если есть возможность использовать что-то получше то стоит этим воспользоваться =)
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #12 : 13.02.2016, 20:24:56 »
buyanov а можете написать  свой код который получше  , а то я не разбираюсь в сокетах или лонг-поллинг-ах. )

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #13 : 13.02.2016, 20:30:58 »
Филипп Сорокин спасибо ваш код работает как часы )

*

zomby6888

  • ******
  • 1484
  • 167
Re: Вопрос о setInterval ()
« Ответ #14 : 13.02.2016, 20:37:36 »
Ну я бы вообще использовал какой нибудь серверный js вроде nodejs или angularjs. Но это сложно и долго.
интернет-блог: http://websiteprog.ru

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #15 : 13.02.2016, 20:42:51 »
у меня будут  запросы идти  от 3 ох человек  , а интервал могу поставить каждые 1 минуты

Re: Вопрос о setInterval ()
« Ответ #16 : 13.02.2016, 20:51:33 »
Филипп Сорокин спасибо ваш код работает как часы )

Спасибо - в карму ;)
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #17 : 14.02.2016, 00:07:08 »
Филипп Сорокин плюсанул карму, у меня возникла проблема есть селект и импут на  том же файле. как написать чтоб когда мышь на этом селекте или импуте (или на этой форме) то setInterval остановился, а если мышь не на нем работала ?
« Последнее редактирование: 14.02.2016, 00:13:27 от hamo »

Re: Вопрос о setInterval ()
« Ответ #18 : 14.02.2016, 00:50:23 »
Всё аналогично:

Код
$('#input-id').on('focus', function() {
    ...
})
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

buyanov

  • ***
  • 178
  • 26
  • Сайты 74
Re: Вопрос о setInterval ()
« Ответ #19 : 14.02.2016, 05:23:22 »
С сокетами конечно лучше на сервере использовать Node.js как уже писали выше.

Но с меня пример =)

Серверная часть у нас будет на PHP создадим какую-нибудь папку в корне сайта (я создал sockets)
Файловая структура проекта:
Код
sockets
|-- bin
     |-- server.php
|-- logs
|-- src
     |-- App
          |--ws.php
|-- composer.json
|-- index.html

Для работы с вебсокетами на PHP я буду использовать библиотеку Ratchet
1. Подготовим проект нашего приложения с помощью Composer
Создадим composer.json
Спойлер
[свернуть]
2. Пишем класс WS который будет осуществлять "общение" с клиентами
Сохраняем в /sockets/src/App/ws.php
Спойлер
[свернуть]
3. Пишем простенький сервер
Сохраняем в /sockets/bin/server.php
Спойлер
[свернуть]
4. Устанавливаем с помощью Composer зависимости для этого просто запускаем
Код
composer install
5. Пишем клиента на JS
Сохраняем куда хотим я положил в туже папку /sockets/index.html
Спойлер
[свернуть]

Тут нужно поменять только адрес нашего сервера у меня на виртуалке домен local.dev сервер я буду запускать на 8080 порту
6. Запускаем из папки sockets
Код
php bin/server.php

в консоль будут падать сообщения

7. Заходим на страницу у (меня http://local.dev/sockets/index.html) в консоли будет видно время с сервера!

8*. Когда наиграемся и решим что пора в бой, наш сервер нужно запустить в фоне (куча статей про демонов на PHP) я поступлю с ним вот так =) отправлю в фон с помощью nohup
Код
nohup php -q bin/server.php > logs/server.log 2>&1 &
сообщения перенаправим в server.log

Ну вот как-то так получается =) Удачи в изучении вебсокетов!

Список литературы:

Документация по Ratchet - http://socketo.me
WebSocket JS клиент - https://learn.javascript.ru/websockets
Статейка с хабра - https://habrahabr.ru/post/79038/
« Последнее редактирование: 14.02.2016, 05:27:46 от buyanov »
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #20 : 14.02.2016, 17:25:16 »
buyanov спасибо за помощь, я тебе плюсанул тоже, но я вообще  с Node.js  и с сокетами не знаком. трудновато как то (((( А не будеть работать если я напишу с помощью сетинтервал ?, вед на сервер будут делать запросы 3 человека  раз в 1 минуту (могу и дольше поставить например до 5 и минут): Мне код сейчас нужен, а чтоб писать на вебсокетах, надо их изучать (((

*

buyanov

  • ***
  • 178
  • 26
  • Сайты 74
Re: Вопрос о setInterval ()
« Ответ #21 : 14.02.2016, 21:45:17 »
Спасибо  ;) Да я видел что уже зарешали вроде  ^-^ Просто написал мало ли, не сейчас так позже пригодится, а может кому-то другому понадобится =)

Просто подход с setInterval() не самый удачный, но при таких условиях (это бэкэнд и нужно 3 юзерам) можно и закрыть на это глаза и сэкономить время.

А и да. Чет так и не понял пример без сокетов нужен?
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #22 : 16.02.2016, 00:01:37 »
народ помогите пожалуйста, мне нужно раз 1 минут обновлять  list.php который находится administrator/components/com_jshopping/views/orders/tmpl/list.php . ну это файл который показывает заказы в JoomShopping. Пробую с помощью setInterval() выдает ошибку Restricted access ((((( как можно решить эту проблему?

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #23 : 16.02.2016, 00:02:23 »
buyanov да ничего не понял )) давай без сокетов пример ))

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #24 : 16.02.2016, 00:14:49 »
Филипп Сорокин setInterval() не останавливается в mozille, работает только в Google и то с какими то паузами, 5 раз норм грузит потом  останавливается на секунд 15-20 и снова  на 5 секунд норм грузит , в чем может быть проблемка?((
Еще проблемка на селекте и импуте не остановливается  setInterval(). вот код

       jQuery(document).ready ( function($) {
          var interval = setInterval(function() {$('#divClass').load("/php/new_user1.php");}, 1000);

          $(window).on('blur', function(){
               clearInterval(interval)
           });
          $(window).on('focus', function(){
                interval = setInterval(function() {$('#divClass').load("/php/new_user1.php");}, 1000)
           });

           $('#mySelect').on('focus', function() {
               clearInterval(interval)
           })
     });   

тут #mySelect мой, при наведении мыши на него setInterval не должен работать
« Последнее редактирование: 16.02.2016, 00:52:26 от hamo »

Re: Вопрос о setInterval ()
« Ответ #25 : 16.02.2016, 00:57:39 »
Не знаю. Попробуйте что-нибудь вроде

Код
$(window).on('blur', function(){
   clearInterval(interval)
});

$(document).on('blur', function(){
   clearInterval(interval)
});

$(document.documentElement).on('blur', function(){
   clearInterval(interval)
});

$(document.body).on('blur', function(){
   clearInterval(interval)
});

Надо выбрать то, что работает. Ещё вариант не останавливать интервал, а каждый раз проверять, в фокусе ли окно.
« Последнее редактирование: 16.02.2016, 01:40:28 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #26 : 16.02.2016, 01:03:42 »
шас попробую, а про селект что скаже, не останавливается  селект и в гоогле

Re: Вопрос о setInterval ()
« Ответ #27 : 16.02.2016, 01:10:55 »
События blur, focus для инпутов должны срабатывать всегда независимо от браузеров. По поводу селекта,  попробуйте события mouseover, mouseout.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

hamo

  • ***
  • 38
  • 1
Re: Вопрос о setInterval ()
« Ответ #28 : 17.02.2016, 00:44:49 »
Филип Сарокин вот написал так  вроде  работает ....

var interval=setTimeout(function(){
         $('#divClass2').load("/php/new_user2.php");
   }, 3000);
$('select').hover(function(){
   clearTimeout(interval);
});
$('select').mouseout( function(){
    interval = setTimeout(function(){
         $('#divClass2').load("/php/new_user2.php");
   }, 3000);
});

Она остановится если перейду на другую страницу ? И если закрою браузер она остановится?

Re: Вопрос о setInterval ()
« Ответ #29 : 17.02.2016, 00:55:06 »
hamo

Никто не понимает конечную цель, которую вы пытаетесь достичь. Вне контекста общей задачи любые советы будут гипотетическими. На данный момент я вижу, что методы просто безумные!
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг