
Pavel
09.10.2018
11:31:28

Пидорас
09.10.2018
11:33:47

Pavel
09.10.2018
11:34:16
Ну вы вопрос пишите тут, кто-то да может и ответит =)

Пидорас
09.10.2018
11:49:32
Ну первый вопрос о том, поочередно ли выполняются задачи из цикла событий?

Google


Пидорас
09.10.2018
11:51:11
А кто занимается вызовом коллбэков, когда вызываются события? Это цикл событий помнит при каком событии, какие коллбэки нужно выполнить?
Ну первый вопрос о том, поочередно ли выполняются задачи из цикла событий?
И если задачи выполняются поочередно, значит ли это то, что их исполнение, является блокирующим?
Конечно, это полезные действия, а действия вроде ожидания ответа от БД следует выполнять асинхронно, пополняя цикл событий, но я имею в виду вот что:
Если NodeJS, например, (без модуля cluster) однопоточная, то в то время, когда выполняется функция из цикла событий, JS не может предпринять никаких действий для того, что бы в это время начать выполнять что-то ещё?
Он ждет пока функция выполнится до конца, а после этого начинает выполнять следующую функцию в очереди.
Если всё так, то как обеспечивается операции I/O?
Например я пишу сервер на NodeJS.
Прошу JS слушать порт 80 и обрабатывать данные.
И вот приходит первый запрос.
Каждый запрос я обрабатываю так:
событие запроса.(Парсинг запроса.(вызов к БД.(вывод результата)))
То есть при первом запросе очередь цикла событий пуста.
Шаг 1.
Случается событие запроса и очередь пополняется первым коллбэком (Парсинг запроса). На сколько я понимаю, дальше event loop (el в будущем) проверяет есть ли что-нибудь в очереди и если есть - выполняет, а выполняет он в данном случае тот самый коллбэк "Парсинг запроса".
Шаг 2.
Во время выполнения первого коллбэка, очередь пополняется вторым коллбэком (вызов к БД), а перед исполнением конечно из очереди убирается выполняемое событие.
Шаг 3.
JS проверяет очередь и приступает к исполнению второго коллбэка. В его теле делается асинхронный запрос к БД. При получении ответа - должен быть вызван третий коллбэк "вывод результата". Значит имя события и коллбэк добавляются в очередь.
Тут у меня возникает вопрос. Кто отвечает за вызов события о получении данных из БД?
И что, если во время любого из этих шагов появится новый запрос?


Максим
09.10.2018
12:33:39
Всем привет подскажите как мне впихнуть url во фрейм.
<frameset rows="100%">
<frame src="" frameborder="0" noresize="noresize">
</frameset>

Viktor
09.10.2018
12:41:04
Он делегирует эту работу другим подсистемам (файловой, БД, сетевой и т.д.). Когда работа заканчивается, источник вызывает этот самый callback с результатом. Event Loop это видит и передает результат интерпретатору Javascript.


Nikolay
09.10.2018
12:56:43


Viktor
09.10.2018
13:03:02
по поводу конкретно вопроса "Кто отвечает за вызов события о получении данных из БД?", я не знаю. Скорее всего сама БД уведомляет, а там уже nodejs-адаптер (с низкоуровневыми биндингами) принимает

Пидорас
09.10.2018
13:11:55

Viktor
09.10.2018
13:12:54
да!

Google

Viktor
09.10.2018
13:13:13
мне этого представления хватило на долгие годы) дальше я пока не лез
этот цикл событий - легковесная штука в плане задач
сам интерпретатор JS на тяжелых задачах тупит, поэтому даже шифрование типа bcrypt делегируется C/C++
то есть JS-интерпретатор - это скоросшиватель
цикл событий - секретарь
всю тяжелую работу делает "аутсорс"
Благодаря этому разделению и неблокирующей архитектуре цикла событий, мы имеем хорошую производительность

Maksim
09.10.2018
13:22:47

Viktor
09.10.2018
13:24:07
да, точно, спасибо за замечание

Пидорас
09.10.2018
13:29:46
Кстати, вот на схеме опрос I/O, сейчас пойду читать и есть после этого, а потом вернусь. Но перед этим вопрос - это действие и есть получение информации о статусе?
Статусе чтения файла, запроса к БД, рендера картинки, вычисления психологического размера члена и т.д.
https://habrastorage.org/getpro/habr/post_images/752/be5/35f/752be535f3ef3f5e0e531e77fc67757a.png

Nikita
09.10.2018
13:32:20
Народ, привет всем! Как реализовать отлов события ajaxSuccess без использования jQuery?

Пидорас
09.10.2018
13:32:32

Nikita
09.10.2018
13:33:41
не обнаружил

Пидорас
09.10.2018
13:34:23

Nikita
09.10.2018
13:36:10

Пидорас
09.10.2018
13:37:02

Nikita
09.10.2018
13:37:28

Maksim
09.10.2018
13:37:42

Nikita
09.10.2018
13:37:52
Ну вот
Я о чем

Google

Maksim
09.10.2018
13:38:09

Nikita
09.10.2018
13:38:56

Maksim
09.10.2018
13:39:16
что значит не на мои события?

Viktor
09.10.2018
13:39:50
поэтому я абстрагировался от конкретики

Nikita
09.10.2018
13:40:41
что значит не на мои события?
Я имею в виду, что у меня нет элемента, на котором будет что-то происходить.
Нужно ловить все AJAX'ы в document. Как если бы было document.ajaxSuccess(...)
Если другой скрипт что-то куда-то запрашивает - я должен об этом знать

Maksim
09.10.2018
13:41:46

Nikita
09.10.2018
13:42:26

Maksim
09.10.2018
13:42:51

Viktor
09.10.2018
13:42:54
аааа

Viktor
09.10.2018
13:42:59
думаю, никак

Nikita
09.10.2018
13:43:05
Ну Жквери как-то это ж делает

Viktor
09.10.2018
13:43:16
не уверен

Maksim
09.10.2018
13:43:19

Nikita
09.10.2018
13:43:35
$itg(document).ajaxSuccess(function(a, b, c) {
if (c.url.indexOf('/cart/add.js') !== -1 || c.url.indexOf('/cart/change.js') !== -1 || c.url === '/cart.js' || c.url === '/cart/update.js') {
itg_fsb_check_cart()
}
})

Viktor
09.10.2018
13:43:56
jQuery - просто обертка над XMLHttpRequest
хм

Maksim
09.10.2018
13:44:44

Google

Nikita
09.10.2018
13:45:02
О как
Я понял, спасибо
Выходит он ловит только те события, которые сам и создает
Тогда все логично

Maksim
09.10.2018
13:45:41
конечно, он их сам создает и сам ловит, просто в другом месте

Viktor
09.10.2018
13:46:24
ну в принципе тут "трава подстелена" для того, чтобы удобно вешать дополнительные слушатели на предмет сетевото ответа
важно понимать, что тут вызов зарегистрирован глобально
это скорее особый случай

Admin
ERROR: S client not available

Viktor
09.10.2018
13:49:05
если сама процедура запроса запрятана где-то в коде (не привязана ни к чему, неглобальна), то к ней никак не получишь
коротко говоря вопрос в следующем

Maksim
09.10.2018
13:49:28
jq просто эталон говеного кода

Viktor
09.10.2018
13:49:28
"есть ли у тебя доступ к контексту вызова, или нет"
слушай

Nikita
09.10.2018
13:53:02
конечно, он их сам создает и сам ловит, просто в другом месте
Я к чему это спрашиваю вообще. Есть магазины и у них есть темки. В зависимости от темы в корзину товар добавляется либо аяксом, либо запросом по клику на кнопку (кнопкой может быть все ( input, span, button)). И вот мне нужно ловить события добавления в корзину
Повесить хэндлеры на все элементы - это изврат

Viktor
09.10.2018
13:53:52
а что происходит после основного запроса (из чужого скрипта)

Maksim
09.10.2018
13:53:59

Viktor
09.10.2018
13:54:02
он должен оставлять "следы"

Google

Maksim
09.10.2018
13:54:09
не надо такой софт использовать )

Viktor
09.10.2018
13:54:49
то есть может тебе отследить не сам запрос, а факт его выполнения (например, html обновился как-то)
я помню как сам шастал по форумам, и мне говорили "тебе надо все переписывать"

Nikita
09.10.2018
13:56:43
В этом и беда, я не знаю когда и откуда что вызовется, и поэтому должен ловить все

Nikolay
09.10.2018
13:59:34
Если неохота либу цеплять, декорируй XMLHttpRequest

Nikita
09.10.2018
14:00:22
Огонь, это мысль. Спасибо

Nikolay
09.10.2018
14:00:57
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function (value) {
this.addEventListener('progress', () => {
console.log("Loading");
}, false);
this.realSend(value);
};
Это ж жс, воруй-убивай.

Viktor
09.10.2018
14:01:44

Duego
09.10.2018
14:01:54
как создать массив от 1 до n ?

Nikolay
09.10.2018
14:02:38

Viktor
09.10.2018
14:03:07

Nikolay
09.10.2018
14:03:14
А что значит от 1? О_о
Не пиши ничего в head и всё.

Viktor
09.10.2018
14:03:29
ему нужен range походу

Yura
09.10.2018
14:03:39