setTimeout как он работает???
Есть у меня задачка одна, вывести большой объем данных на карте, очень большой, от 10 000 объектов, так вот сначала сделал все просто тупо в цикле, но потом понял, что это очень трудно для проца, во время выполнения цикла браузер благополучно зависал секунд на 10. Для борьбы с этой проблемой решил использовать функцию setTimeout с минимальной задержкой, все в общемто получилось, но чтото терзают меня смутные сомнения, всеже setTimeout асинхронная функция, поэтому возник вопрос, а не может ли одна и таже функция запуститься одновременно?
В это случае это может нарушить структуру данных, учитывая что счетчик текущей операции увеличивается внутри функции выполнения progressCurent++; |
не до конца описал условия, сама функция выглядит примерно так:
var progressCurent = 0, arrayList = []; var func = function() { if( arrayList[progressCurent] ) { // logic ... progressCurent++; setTimeout(func, 10); } } setTimeout(func, 10); |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Мне кажется гораздо больше шансов у подобного бага при использовании функции setInterval нежели setTimeout ... |
В вашем коде всё нормально, кроме того, что он будет выполнятся очень медленно. В IE, например, минимально возможная задержка для setTimeout -- 15 мс, в Fx -- 11 мс, в остальных браузерах получше дела обстоят.
|
Цитата:
Opera: затрачено времени 21887 мс. Firefox: затрачено времени 30952 мс. IE: затрачено времени 94647 мс. Дауж ... и это только 1541 объект, ну как вариант можно увеличить количество операций в одном событии, в данный момент, одно событие одна операция, но все же это лучше чем полностью подвешивать браузер на 10-20 сек на i5, боюсь себе представить что твориться на машинках послабее. |
namo86, начать стоит с того, зачем столько объектов на карте? Может их можно не все сразу выводить? Расскажи поподробнее
|
Часовой пояс GMT +3, время: 10:35. |