![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: 2 Всего: 14 |
Очень важный для меня вопрос. Очень!!!
Дело тут лечить геморой или не личить (и нет гемороя) Как бы знаю, что в браузерах, одна (пока что и слава богу) JavaScript машина. Что по идеи пока пошла обрабатываться одна функция вроде бы другая не будет. Вот хотелось бы знать, так это? Вот еще вопрос: Что, вообще ничего не будет вызываться (по таймингу или по событию) до окончания запущенной функции или что-то может вызваться и стать в очередь на обработку в стеке по тому же или по другому событию или по таймингу. Приведу общую картину моей ситуации По событию пошла выполнятся обработка ноды. Не вклинется ли в середину этого обработчика, функция, запущенная по таймингу тоже обрабатывающая эту ноду (например удаляющая)? Просто, если вклинится и уберет нафиг ноду или объект JavaScript, то я получу document.getElementById(...)=null или еще чего и тогда схлопачу исключение, конечно, если я это не предусмотрю заранее (вот он, геморойчик-то вылез). Понятное дело, что если я такой хитрый и отложу обработку части логики через setTimeout() или через другое событие, то вклинится легко, но это я предусмотрю, а вот хотелось бы быть точно уверенным, что никакая (сволочь Кстати, всем доброго вечера Это сообщение отредактировал(а) Иль - 13.7.2005, 19:38 -------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: 2 Всего: 14 |
Почему заинтересовался. Видел, как в Internet Explorer, в FireFox и Mozilla выскакивают подряд несколько alert() и накладываются друг на друга. Это ИМХО были событийные вызовы алертов.
-------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Нет, не будет такого.
В ИЕ быть неможет. Сам смотри:
В IE метод window.alert() является перекрывающим -> пока не нажать на кнопку сценарий преостановился и не выполняется. |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Проблемы нет, в JS под браузерами "многопоточности" как таковой нет. Сначала отработает код работающеий с нодой, затем отработает другой код, хотя так лучше не делать, мало ли чего
alert открывает модальное окно, физически не возможно открыть несколько алертов друг на дружке. Модальное значит выполнение скрипта останавливаеться пока окошко не закроеться. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: 2 Всего: 14 |
Слава тебе господи! Спосибо, успокоили, а то я уж за гололву взялся. Уф, спокойные сегодня сны будут снится.
Добавлено @ 21:03 Ну тогда можно спокойно отслеживать только внутренние конфликты (внутри одного треда) и не нагружать код -------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Gregof |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 3.6.2004 Репутация: 1 Всего: 12 |
Sardar и Aliance вы не правы. Вот пример демонстрирующий несколько алертов(пример под IE):
После того как выскочит первый алерт, надо не закрывать его, а лишь немного подождать второго Алерт действительно блокирует текущую нить, но возможна ситуация возникновения другой. Иль вклиниться в исполнения кода можно лишь в том случае если ты сам отпустишь нить. Если ты этого не делаешь, то и предусматривать возможность неожиданного исчезновения объекта, во время исполнения твоего кода, не надо. Так что:
--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф) |
||||||
|
|||||||
| Gregof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 3.6.2004 Репутация: 1 Всего: 12 |
Пример под Mozilla немного изощреннее
Так же как и в примере под IE надо немного подождать появления второго алерта не закрывая первого. У меня второй появляется прямо над первым, так что для того чтоб его увидеть второй надо отодвинуть. --------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф) |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Gregof влепил плюс за ценное замечание
Действительно модальное окно ведёт себя "не по модальному", это скорее всего обьясняеться тем, что XMLHttpRequest работает отдельным потоком в бродилке. alert останавливает только текущий поток и вообще в JS по умолчанию один поток.
Таймауты откладывают выполнение кода и после вызова сразу идут вперёд. Но таймауты исполняються не в отдельных потоках (по моему по историческим причинам, когда NN умирал от любого таймаута, а сейчас все маньячат из-за совместимости). В результате таймаут начинает работу после того как основной поток освобождён. ИМХО это не правильно, лучше бы таймауты в разных потоках работали, правда тогда потребуються механизмы синхронизаций. Юзая "левые" обьекты можно открыть больше потоков исполнения, хотя это изврат. Интересно приведёт ли это к проблемам синхронизации, например если из обработчика XMLHttpRequest.onreadystatechange удалить ноду в документе, которая в данный момент отрабатываеться в другом(основном) потоке? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |