Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [IndexedDB] Asynchronous API / 7 сообщений из 7, страница 1 из 1
09.11.2012, 01:31:04
    #38031125
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
Попробовал сие чудо враждебной техники (©) Что смутило: все построено на конструкции а-ля:
Код: 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
09.11.2012, 04:30:22
    #38031141
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
Или я не понял твоего возмущения (следовательно, проблемы), либо ты сегодня устал и плохо понимаешь предмет ...
Непосредственно с IndexedDB не знаком, но вот AsynchronousAPI - вещь крайне знакомая: кроме того, что вся событийная модель javascript на этом построена, так и еще Flash (ActionScript) базируется на этом. Суть и прелесть асинхронизма как раз и состоит в том, что инициатору события глубоко и сильно, поставил ты брекпоинт на хандлер или нет, да и на то, поставил ли ты сам хандлер на событие - это всего лишь обработка результата действия - события, но никак не самого действия, на которое повлиять так нельзя. Сам js - однопоточный, но работа браузера - нет, и этой базы тоже (головой ручаюсь), то есть остановкой своего скрипта ты не остановишь работу всего браузера и базы, только лишь своего потока обработки скрипта. Кстати, во флеше с этим дела обстоят лучше - он как бы двухпоточный - твой скрипт в одном потоке, а работа мувика в другом - так понимание процесса проще.
...
Рейтинг: 0 / 0
09.11.2012, 10:58:34
    #38031350
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
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
09.11.2012, 11:11:54
    #38031372
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
В догонку: если бы было ~ вот так:
Код: 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
09.11.2012, 11:15:44
    #38031381
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
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
09.11.2012, 11:20:31
    #38031396
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
Ex_Softи теперь, если представить, что поток, рожденный в open(), отработал быстрее и добрался до дерганья хандлеров, чем основной поток их инициализировал (DoSmth() выполняет что-то тяжелое) - получаем, что в хандлер мы уже не попадаем, со всеми вытекающими...на самом деле хандлер не вызывается напрямую из вспомогательного потока.
Вспомогательный поток просто добавляет команду вызова в очередь сообщений основного потока (аналогично PostMessage из WinAPI).
Т.е. хандлер отрабатывает в основном потоке, когда до него дойдет очередь.
...
Рейтинг: 0 / 0
09.11.2012, 11:23:39
    #38031402
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[IndexedDB] Asynchronous API
Яростный МечВспомогательный поток просто добавляет команду вызова в очередь сообщений основного потока (аналогично PostMessage из WinAPI).
Аха... Тогда все становится на свои места... Пон... Сп...
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [IndexedDB] Asynchronous API / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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