Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Зависают браузеры под masOS X (https://javascript.ru/forum/misc/12947-zavisayut-brauzery-pod-masos-x.html)

Falcon 09.11.2010 18:29

Зависают браузеры под masOS X
 
Есть достаточно массивный кусок кода на javascript
все загружается, все работает, но под макосью, если начать перезагружать страницу, независимо от того выполняется что или уже все выполнилось, то safari, opera, и firefox намертво виснут (хром спокоен). Проверял на нескольких машинах.

под Linux, FreeBSD и Windows все Ок, во всех браузерах.

Кто нибудь сталкивался с подобным?

vladlen 10.11.2010 21:12

Мож таймеры не сброшены? Или реквесты весят. В любом случае остались потоки и семафор не дает работать дальше.
Тут явно проблема браузера. Я бы начал копать именно с того о чем сказал.

DooMer 11.11.2010 12:06

vladlen,
прочитал умные слова в нете ? почему именно семафор, а не мьютекс ?

Falcon 11.11.2010 13:28

я понимаю что таймеры не сброшены, но проблема что они и не должны быть сброшены, всегда 2-3 таймера.

vladlen 11.11.2010 14:53

Цитата:

Сообщение от DooMer
почему именно семафор, а не мьютекс

Это одно и то же.
Цитата:

Сообщение от Falcon
я понимаю что таймеры не сброшены

Ну это самое первое на что я грешу.
Цитата:

Сообщение от Falcon
но проблема что они и не должны быть сброшены

Есть проблема монопольного захвата памяти, ее придется решить. А таймеры сначала все срубить (если это возможно), а потом по одному поднимать. В какой-то момент проблема всплывет.
Новый хак узнаешь :)
Самый верняковый метод - дебаг браузера :)

Falcon 11.11.2010 18:07

сорр, не написал выше, если таймеры убрать то все работает, так же выяснилось что если оставить 1 таймер-не работает, убрать его - работает, таймер раз в секунду. возможно поможет если сделать его реже(не пробовал еше), то поможет, но реже в проекте его не сделать.
дебаг браузера
С радостью, подскажи где взять исходники маковского сафари

vladlen 11.11.2010 19:13

Цитата:

Сообщение от Falcon
исходники маковского сафари

Исходники движка вполне себе открытый проект, но дело-то не в них. Ты правильно сделал что опробовал все варианты систем. MacOS не *nix и не *BSD. Придется дебажить в рантайм и иметь дело с ASM :) Не думаю что это тебе нужно.
Ответ на твою проблему скорее всего прост: указатель на таймер присваивается чужой (уже занятой) переменной. Как результат - конфликт.

Falcon 11.11.2010 19:18

>>Не думаю что это тебе нужно.
как ты прав)

>>Исходники движка вполне себе открытый проект
если я не ошибаюсь то движок у них с хромом одинаков, но хром единственное что не вылетает под Маком

>>указатель на таймер присваивается чужой (уже занятой) переменной.
есть большой объект, и интервал устанавливается только раз:
this.player_interval = setInterval((function(){  
            var ts = this.FlashAPI.getTimePlayback();
            if (ts){
                this.set_play_marker_time(ts);
            }
        }).bind(this),  this.player_interval_in_ms);


еще попробую поиграться с переменными,
плюс проверю как влияет время,
и попробую таймаут использовать
и на StackOverflow спрошу

vladlen 11.11.2010 23:14

Цитата:

Сообщение от Falcon
если я не ошибаюсь то движок у них с хромом одинаков

не ошибаешься, только реализация разная. Хром это многопроцессное приложение, а остальные только многопоточные. В итоге Хром это хорошо обстрагированные части без общей разделяемой памяти. Посему и не падает.
Поэтому и говорю: хоророшо что попробовал все системы и браузеры. Ответ попросту стал очевиден. Ты вызвал потоки, а они между собой законфликтовали.

Цитата:

Сообщение от Falcon
проверю как влияет время

Скорее всего никак.

Цитата:

Сообщение от Falcon
есть большой объект

А сколько у этого объекта потомков? Если не один, то тут собака и порылась :)


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