реализация таймлайн
Есть множество функций которые вызываются при определенных условиях и выполнять их нужно с определенной периодичностью.
Чтоб не вешать на каждую функцию отдельный setTimeout есть идея сделать функцию-таймлайн, в которую можно было бы добавлять функции требующие периодического выполнения с информацией о интервале выполнения. Когда функцию больше ненужно выполнять удалять ее из таймлайна. Пример того, что я хочу (в очень убогом виде:) ) выглядит так : var a=5; //это типа интервал добавленной ф-ции var cycle=0; timeline = function (){ //изначально timeline пуста if (a == 0){ prim(); a=5 } a-- setTimeout(timeline,1) } prim(){cycle++} //нуждается в периодическом выполнении спасибо |
А в чем вопрос!?
|
изначально ф-ция таймлайна выглядит так:
timeline = function (){ setTimeout(timeline,1) } а ф-ций таких как prim() может быть много и добавлять к таймлайну и удалять их оттуда нужно динамически, поэтому глобальная переменная в роли интервала не подходит. Вопрос как решить эту задачу о_0 вообще возможно в функцию динамически добавить кусок кода? |
Добавляйте функции в массив и каждый раз по таймеру пробегайте по элементам (функциям) массива и запускайте их.
|
:)
все бы хорошо, только интервал-то у ф-ций может быть разный. предлагаете задать отдельный массив для переменных-интервалов? |
Как вы все это синхронизировать собрались в одной функции, если интервалы могут быть разные. Активное ожидание потребует слишком много ресурсов и скрипт будет остановлен, а допустим, если ввести ограничение, чтобы интервал, по которому будут запускаться функции не был меньше 10мс, и проверять каждые 10мс, то из-за погрешностей таймеры не будут совпадать. Да и необходимость решения подобной задачи в JavaScript не понятна, зачем вам это?
|
Я сталкивался с проблемой когда из за лагов браузера функции которые должны выполняться синхронно (с разными сетТаймаутами) глючили и выполнялись не синхронно. Обычно это незаметные доли секунды, но из-за погрешности, со временем не синхронность становится заметной. А если все ф-ции выполняются одним сетТаймаутом, то и ступор подействует на все, а значит никакой погрешности не будет.
Если реализовать активное ожидание через if (как я писал в топе), например, это займет много ресурсов? |
Что значит синхронно? JavaScript однопоточный язык, одновременно все равно выполняться не будет.
|
:)
настолько синхронно насколько может позволить JS |
такая функция будет тормозить браузер больше чем просто несколько с разными таймаутами...
|
так что, надежды нет совсем?
|
может просто ты неправильно решаешь задачу? Скажи что тебе требуется и мы попытаемся вместе найти оптимальное решение.
|
Выше писал. Не один раз.
Мой мозг абсолютно отказывается думать в другом направлении. Буду признателен если, хотя бы натолкнете на мысль о решении |
не вижу нигде конкретной задачи, которую ты пытаешся решить... Везде туманное объяснение про функции, которые лагают... Может там вообще можно обойтись без кучи функцию по таймерам...
|
без функций может и можно, но без таймеров никак. по крайней мере 1 нужен.
Задача. Представьте. Страница, на ней множество, скажем, картинок. Картинки можно двигать, картинки имеют "вес" (т.е. каждая картинка двигается с разной скоростью) и их может быть очень много. Картинки можно двигать партиями (выделив несколько) и они имеют "продолжительность жизни". По окончании его стираются со страницы. Картинки эти могут появляться переодически. |
жесть... Самостоятельно двигающиеся картинки на сайте...
Тогда тебе нужна всего одна функция срабатывающая по таймеру. Таймер самый минимальный. И в зависимости от значения сдвигающая картинки. Что-то типа: var start = new Date(); function move(){ var picts = { 'pict1':3, 'pict2':5, 'pict3':15, 'pict4':1, 'pict5':2 } for(var i in picts) if ( ((new Date())-start) % picts[i] == 0) imgs[i].MOVE_KUDA_NIBUD(); } setInterval(move,1); Пример не рабочий, но суть отражает... |
Новый русский гуляет с сыном по набережной. На берегу сидит художник и рисует пейзаж. Новый с обращением к сыну:
-Ну вот видишь, сынок, как народ то без палароида мучится... Во избежании вывиха мозга автора дают наводку: Планировщик задач на JavaScript (хотя я с ней и не согласен) ;) |
ZoNT,
Спасибо. alekciy, Спасибо. Это вроде то, что нужно. Но я не любитель чужих библиотек :D поэтому разберусь с кодом и напишу что-то свое. |
К чему я вспомнил анекдот то... как уже правильно писали в коментах, имхо, пытаться делать из JS операционную системы не стоит. А уж для однопоточной реализации тем более.
|
Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
|
Часовой пояс GMT +3, время: 04:51. |