Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2013, 11:22
Новичок на форуме
Отправить личное сообщение для Diam4ik Посмотреть профиль Найти все сообщения от Diam4ik
 
Регистрация: 19.11.2013
Сообщений: 4

Долгое отрабатывание скрипта и блокирование страницы
Приветствую всех.

Такая проблема: использую api google maps, и для объектов на карте использую кластеры MarkerClusterer (https://developers.google.com/maps/a...toomanymarkers).
Объектов для карты огромное количество (аля 50.000).
Сначала грузится карта, все ок, потом в цикле начинает наполняться слой меток (объектов) для карты. И вот это наполнение карты данными блокирует страницу и не дает ничего делать, пока не заполнится вся карта.
Пробовал отрабатывать скрипт последним, подгружал через ajax, но в любом случае вызывает "подвисание" страницы во время исполнения этого цикла.

Вот код данного цикла (на этот момет использую ajax).

$.each(response, function(i, datajson){

                var contentString = '<div class="gmaps-marker-window"><b>'+datajson.country_name+'</b> '+datajson.name+'</div>';

                var latLng = new google.maps.LatLng(datajson.x, datajson.y);
                var marker = new google.maps.Marker({
                    position: latLng,
                    icon: markerImage,
                    shadow: markerImageShadow
                });

                markers.push(marker);

                google.maps.event.addListener(marker, 'mouseover', function() {
                    if (infoMarker) { 
                        infoMarker.close();
                    }
                    infoMarker = new google.maps.InfoWindow({content: contentString});
                    infoMarker.open(map, marker);
                });
                google.maps.event.addListener(marker, 'click', function() {
                    get_info_about_course(datajson,1);
                });	

            });


Собственно сам вопрос:
Может кто знает, как избавиться от блокировки страницы при отрабатывании (прошу заметить, именно отрабатывании, не загрузке) скрипта или может другие идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2013, 13:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,267

Пока скрипт не завершен - "блокировка" остается.
Как вариант, делай "многопоточно", используя setTimeout()...
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2013, 14:10
Новичок на форуме
Отправить личное сообщение для Diam4ik Посмотреть профиль Найти все сообщения от Diam4ik
 
Регистрация: 19.11.2013
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
Пока скрипт не завершен - "блокировка" остается.
Как вариант, делай "многопоточно", используя setTimeout()...
Если я правильно понимаю возможность использования setTimeout(), то уже пробовал, но кроме отложения во времени выполнения скрипта никакой пользы по ускорению и "отвисанию" не принесло.
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2013, 14:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,267

Сообщение от Diam4ik
никакой пользы по ускорению
По ускорению пользы небудет.

Сообщение от Diam4ik
и "отвисанию"
А вот "висения" таки не будет.
Правда останется вопрос:
- Как ты тот setTimeout() будешь применять?
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2013, 14:33
Новичок на форуме
Отправить личное сообщение для Diam4ik Посмотреть профиль Найти все сообщения от Diam4ik
 
Регистрация: 19.11.2013
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
По ускорению пользы небудет.


А вот "висения" таки не будет.
Правда останется вопрос:
- Как ты тот setTimeout() будешь применять?
Ну вот, значит я не совсем понимаю смысла применения setTimeout(), ибо каким образом это должно помочь убрать "подвисание"? Т.е. как setTimeout() направляет выполнение в отдельный поток?
Можно пример?
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2013, 16:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,267

Сообщение от Diam4ik
Т.е. как setTimeout() направляет выполнение в отдельный поток?
Да.

Сообщение от Diam4ik
Можно пример?
Вот у тебя есть цикл... Пока он не закончится - пользователь управление не получает и изменений на странице не видит...

Если "итерации" выполнять, используя setTimeout() - управление не "забирается" и пользователь видит как информация "кусками" появляется на странице...
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2013, 18:39
Новичок на форуме
Отправить личное сообщение для Diam4ik Посмотреть профиль Найти все сообщения от Diam4ik
 
Регистрация: 19.11.2013
Сообщений: 4

В моем случае это не срабатывает, испробовал все возможные варианты с использованием setTimeout().
На данный момент пытаюсь реализовать Web Worker для своей ситуации, пока не особо представляю как.

Может у кого-то есть решения для насущного вопроса?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа по установке скрипта для перелистывания страницы doz Работа 0 24.04.2013 12:23
Автозапуск скрипта при загрузке страницы HepoH Javascript под браузер 3 31.03.2012 22:27
Реагирование скрипта на загрузку страницы 6o6puk jQuery 2 01.07.2010 17:41
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35
Срабатывание скрипта при загрузке страницы bormax Общие вопросы Javascript 3 03.04.2008 09:57