Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2011, 18:50
Интересующийся
Отправить личное сообщение для namo86 Посмотреть профиль Найти все сообщения от namo86
 
Регистрация: 18.11.2010
Сообщений: 19

setTimeout как он работает???
Есть у меня задачка одна, вывести большой объем данных на карте, очень большой, от 10 000 объектов, так вот сначала сделал все просто тупо в цикле, но потом понял, что это очень трудно для проца, во время выполнения цикла браузер благополучно зависал секунд на 10. Для борьбы с этой проблемой решил использовать функцию setTimeout с минимальной задержкой, все в общемто получилось, но чтото терзают меня смутные сомнения, всеже setTimeout асинхронная функция, поэтому возник вопрос, а не может ли одна и таже функция запуститься одновременно?

В это случае это может нарушить структуру данных, учитывая что счетчик текущей операции увеличивается внутри функции выполнения progressCurent++;
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2011, 19:23
Интересующийся
Отправить личное сообщение для namo86 Посмотреть профиль Найти все сообщения от namo86
 
Регистрация: 18.11.2010
Сообщений: 19

не до конца описал условия, сама функция выглядит примерно так:

var progressCurent = 0, arrayList = [];
			
var func = function() 
{
	if( arrayList[progressCurent] )
	{
		// logic ... 
		
		progressCurent++;
		
		setTimeout(func, 10);
	}
}

setTimeout(func, 10);
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2011, 19:55
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от namo86
не может ли одна и таже функция запуститься одновременно
Нет, такого в javascript быть не может
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2011, 20:52
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от namo86
всеже setTimeout асинхронная функция, поэтому возник вопрос, а не может ли одна и таже функция запуститься одновременно?
но ты не можешь предсказать их последовательность запуска -если ещё извне будет запускаться не один раз -будет зависеть от производительности отдельно взятого компа

Последний раз редактировалось dmitriymar, 27.01.2011 в 21:38.
Ответить с цитированием
  #5 (permalink)  
Старый 27.01.2011, 21:35
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от dmitriymar
но ты не можешь предсказать их последовательность запуска -если ещё из вне будет запускаться не один раз -будет зависеть от производительности отдельно взятого компа
Это ж надо было так не по-русски написать...
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2011, 21:37
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Sweet
Это ж надо было так не по-русски написать...
зато понятно
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2011, 16:03
Интересующийся
Отправить личное сообщение для namo86 Посмотреть профиль Найти все сообщения от namo86
 
Регистрация: 18.11.2010
Сообщений: 19

Цитата:
но ты не можешь предсказать их последовательность запуска
В этом и вопрос, в принципе, установка нового события setTimeout происходит только в конце выполнения текущего события, так что пересечений быть не должно, но малоли чего поэтому и спросил

Мне кажется гораздо больше шансов у подобного бага при использовании функции setInterval нежели setTimeout ...
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2011, 16:06
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В вашем коде всё нормально, кроме того, что он будет выполнятся очень медленно. В IE, например, минимально возможная задержка для setTimeout -- 15 мс, в Fx -- 11 мс, в остальных браузерах получше дела обстоят.
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2011, 18:07
Интересующийся
Отправить личное сообщение для namo86 Посмотреть профиль Найти все сообщения от namo86
 
Регистрация: 18.11.2010
Сообщений: 19

Сообщение от Kolyaj Посмотреть сообщение
В вашем коде всё нормально, кроме того, что он будет выполнятся очень медленно. В IE, например, минимально возможная задержка для setTimeout -- 15 мс, в Fx -- 11 мс, в остальных браузерах получше дела обстоят.
Chrome: затрачено времени 18894 мс.
Opera: затрачено времени 21887 мс.
Firefox: затрачено времени 30952 мс.
IE: затрачено времени 94647 мс.

Дауж ... и это только 1541 объект, ну как вариант можно увеличить количество операций в одном событии, в данный момент, одно событие одна операция, но все же это лучше чем полностью подвешивать браузер на 10-20 сек на i5, боюсь себе представить что твориться на машинках послабее.
Ответить с цитированием
  #10 (permalink)  
Старый 28.01.2011, 20:16
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

namo86, начать стоит с того, зачем столько объектов на карте? Может их можно не все сразу выводить? Расскажи поподробнее
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как работает обработчик onMouseMove() bayah Общие вопросы Javascript 3 29.04.2010 14:36
Как завершить Settimeout() ? libinstyle Events/DOM/Window 7 29.03.2010 12:40
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Не могу понять как работает jQuery kostiaGt jQuery 2 20.07.2008 08:42