powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [IndexedDB] Asynchronous API
7 сообщений из 7, страница 1 из 1
[IndexedDB] Asynchronous API
    #38031125
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал сие чудо враждебной техники (©) Что смутило: все построено на конструкции а-ля:
Код: javascript
1.
2.
3.
4.
openDBRequest = indexedDB.open(dbName, dbVersion);
openDBRequest.onsuccess=function(event){ };
openDBRequest.onupgradeneeded=function(event){ };
openDBRequest.onerror=function(event){ };


И, вот, стОит, к примеру, на выделенной строке поставит breakpoint в debugger'е, пойти покурить и в обработчики мы уже никогда не попадем. Т.е., как я понял, все зиждется на уповании, что к моменту вызова обработчиков в потоке, рожденным в open, они уже будут установлены, сиречь на русском "авось"? Я, конечно, попробую поковырять mozilla-release\dom\indexedDB\*.*, но может кто скажет по этому поводу свое веское слово?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031141
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я не понял твоего возмущения (следовательно, проблемы), либо ты сегодня устал и плохо понимаешь предмет ...
Непосредственно с IndexedDB не знаком, но вот AsynchronousAPI - вещь крайне знакомая: кроме того, что вся событийная модель javascript на этом построена, так и еще Flash (ActionScript) базируется на этом. Суть и прелесть асинхронизма как раз и состоит в том, что инициатору события глубоко и сильно, поставил ты брекпоинт на хандлер или нет, да и на то, поставил ли ты сам хандлер на событие - это всего лишь обработка результата действия - события, но никак не самого действия, на которое повлиять так нельзя. Сам js - однопоточный, но работа браузера - нет, и этой базы тоже (головой ручаюсь), то есть остановкой своего скрипта ты не остановишь работу всего браузера и базы, только лишь своего потока обработки скрипта. Кстати, во флеше с этим дела обстоят лучше - он как бы двухпоточный - твой скрипт в одном потоке, а работа мувика в другом - так понимание процесса проще.
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031350
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckя не понял твоего возмущения
/me думает: гм... А я хотел изобразить недоумение...
IDVsbruckчто инициатору события глубоко и сильно ... на то, поставил ли ты сам хандлер на событие
Во-о-о-т! Весь API посторен на хандлерах , которые, в свою очередь, навешиваются на результат функции, которая, грубо говоря: рожает объект, возвращает его в основной поток, передает в рожденный ею поток, в котором дергаются хандлеры повешенные в основном потоке. На пальцах:
для сравнения возьмем XHR
Код: javascript
1.
2.
3.
4.
5.
6.
request = getXHR();
request.onreadystatechange = function() { // обвешиваем
	DoSmth();
};
request.open();
request.send(); // поехали!!! (к этому моменту у нас все готово и все под контролем)


IndexedDB
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
request = indexedDB.open(); // получаем результат, при этом open в отдельном потоке чегой-то продолжает делать. И, в зависимости от результата, будут дергаться обработчики onsuccess || onerror

 DoSmth(); // гипотетическая функция, выполняющая что-то тяжелое

request.onsuccess = function(evt) { // обвешиваем
	DoSmthOnSuccess();
};
request.onerror = function(evt) { // обвешиваем
	DoSmthOnError()
};


и теперь, если представить, что поток, рожденный в open(), отработал быстрее и добрался до дерганья хандлеров, чем основной поток их инициализировал (DoSmth() выполняет что-то тяжелое) - получаем, что в хандлер мы уже не попадаем, со всеми вытекающими...

Надеюсь я сейчас менее сумбурно изъяснялся...
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031372
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку: если бы было ~ вот так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
request = indexedDB.prepare(); // получаем request

request.onsuccess = function(evt) { // обвешиваем
	DoSmthOnSuccess();
};
request.onerror = function(evt) { // обвешиваем
	DoSmthOnError()
};

request = indexedDB.open(); // поехали!!!


То никакого бы разрыва шалона (по крайней мере у меня ;) ) не происходило бы...
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031381
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Код: javascript
1.
DoSmth(); // гипотетическая функция, выполняющая что-то тяжелое

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
openDBRequest = indexedDB.open('jopaJLo', 1);
for (var i = 0; i<100000000; ++i){
	var r = Math.sin(i);
}
openDBRequest.onsuccess=function(event){ 
	var r=0;
};
openDBRequest.onupgradeneeded=function(event){ };
openDBRequest.onerror=function(event){ };

onsuccess вызвался.

брекпоинт немного по другому задерживает выполнение.
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031396
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Softи теперь, если представить, что поток, рожденный в open(), отработал быстрее и добрался до дерганья хандлеров, чем основной поток их инициализировал (DoSmth() выполняет что-то тяжелое) - получаем, что в хандлер мы уже не попадаем, со всеми вытекающими...на самом деле хандлер не вызывается напрямую из вспомогательного потока.
Вспомогательный поток просто добавляет команду вызова в очередь сообщений основного потока (аналогично PostMessage из WinAPI).
Т.е. хандлер отрабатывает в основном потоке, когда до него дойдет очередь.
...
Рейтинг: 0 / 0
[IndexedDB] Asynchronous API
    #38031402
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечВспомогательный поток просто добавляет команду вызова в очередь сообщений основного потока (аналогично PostMessage из WinAPI).
Аха... Тогда все становится на свои места... Пон... Сп...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [IndexedDB] Asynchronous API
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]