Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   реализация таймлайн (https://javascript.ru/forum/misc/2514-realizaciya-tajjmlajjn.html)

Bajjy 09.01.2009 02:16

реализация таймлайн
 
Есть множество функций которые вызываются при определенных условиях и выполнять их нужно с определенной периодичностью.
Чтоб не вешать на каждую функцию отдельный setTimeout есть идея сделать функцию-таймлайн, в которую можно было бы добавлять функции требующие периодического выполнения с информацией о интервале выполнения. Когда функцию больше ненужно выполнять удалять ее из таймлайна.

Пример того, что я хочу (в очень убогом виде:) ) выглядит так :
var a=5; //это типа интервал добавленной ф-ции
var cycle=0;
timeline = function (){ //изначально timeline пуста
	if (a == 0){
		prim();
		a=5
	}
a--	
setTimeout(timeline,1)	
}
prim(){cycle++} //нуждается в периодическом выполнении

спасибо

Zibba 09.01.2009 02:27

А в чем вопрос!?

Bajjy 09.01.2009 02:37

изначально ф-ция таймлайна выглядит так:
timeline = function (){
setTimeout(timeline,1)
}

а ф-ций таких как prim() может быть много и добавлять к таймлайну и удалять их оттуда нужно динамически, поэтому глобальная переменная в роли интервала не подходит. Вопрос как решить эту задачу о_0
вообще возможно в функцию динамически добавить кусок кода?

Octane 09.01.2009 12:05

Добавляйте функции в массив и каждый раз по таймеру пробегайте по элементам (функциям) массива и запускайте их.

Bajjy 09.01.2009 13:03

:)
все бы хорошо, только интервал-то у ф-ций может быть разный.
предлагаете задать отдельный массив для переменных-интервалов?

Octane 09.01.2009 13:50

Как вы все это синхронизировать собрались в одной функции, если интервалы могут быть разные. Активное ожидание потребует слишком много ресурсов и скрипт будет остановлен, а допустим, если ввести ограничение, чтобы интервал, по которому будут запускаться функции не был меньше 10мс, и проверять каждые 10мс, то из-за погрешностей таймеры не будут совпадать. Да и необходимость решения подобной задачи в JavaScript не понятна, зачем вам это?

Bajjy 09.01.2009 14:31

Я сталкивался с проблемой когда из за лагов браузера функции которые должны выполняться синхронно (с разными сетТаймаутами) глючили и выполнялись не синхронно. Обычно это незаметные доли секунды, но из-за погрешности, со временем не синхронность становится заметной. А если все ф-ции выполняются одним сетТаймаутом, то и ступор подействует на все, а значит никакой погрешности не будет.
Если реализовать активное ожидание через if (как я писал в топе), например, это займет много ресурсов?

Kolyaj 09.01.2009 22:08

Что значит синхронно? JavaScript однопоточный язык, одновременно все равно выполняться не будет.

Bajjy 09.01.2009 22:37

:)
настолько синхронно насколько может позволить JS

ZoNT 11.01.2009 11:50

такая функция будет тормозить браузер больше чем просто несколько с разными таймаутами...


Часовой пояс GMT +3, время: 12:12.