Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 March 24

DN

Dmytro Nechai in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Если мы исключим вощможность неправоты то не сможем дискриминировать на научной основе
Тиииим, люди жалуются на метасрач, пригласи в  ГУЛАГ и ответь.
А то я тут пытаюсь обьяснить людям что это чат для проги, а ты дальше накидываешь.
источник

AM

Alexey M in NodeUA - JavaScript and Node.js in Ukraine
спасибо, увидел
источник

OD

Oleh Diian in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Если мы исключим вощможность неправоты то не сможем дискриминировать на научной основе
да просто уберите тот пост
источник

AL

Andrey Listochkin in NodeUA - JavaScript and Node.js in Ukraine
Alexey M
разве setTimeout( ..., 0)
не должен выполнится первым всегда? т.к. он выполняется в фазе timers, которая идет первой в eventLoop?
setImmidiate изначально задумывался как замена setTimeout(, 0), тк на практике из-за обратной совмести с IE все браузеры и рантаймы исполняли таймауты с задержкой.

Фактически выполнялся такой код:

setTimeout(() => …, Math.max(14, timeout))

т.е. минимальный тайймаут в браузерах и соответственно в V8 был 14 миллисекунд.

Это стало проблемой, когда в ноде через таймауты стали описывать цепочки задач. В node при этом было свое API - process.nextTick, который позволял гарантировать, что операция будет выполнена сразу без задержки.

Но nextTick не давал Ноду вставить обработку IO-колбеков между текущим кодом и кодом в некст-тике. setImmidiate разрешал все-таки ИО события обрабатывать.

Со времененм поддерживать совместимость с IE перестало быть настолько критичным, и setTimeout в V8 переделали так, что он стал работать без задержки.
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Oleh Diian
а вот где я прочитал
Браузер ограничивает 4-мя мс минимальную задержку между пятью и более вложенными вызовами setTimeout, а также для setInterval, начиная с 5-го вызова.

https://learn.javascript.ru/settimeout-setinterval#setinterval
ну про браузер надо смотреть их сорцы. Самое ближнее что есть это chromium наверное.
источник

AM

Alexey M in NodeUA - JavaScript and Node.js in Ukraine
Andrey Listochkin
setImmidiate изначально задумывался как замена setTimeout(, 0), тк на практике из-за обратной совмести с IE все браузеры и рантаймы исполняли таймауты с задержкой.

Фактически выполнялся такой код:

setTimeout(() => …, Math.max(14, timeout))

т.е. минимальный тайймаут в браузерах и соответственно в V8 был 14 миллисекунд.

Это стало проблемой, когда в ноде через таймауты стали описывать цепочки задач. В node при этом было свое API - process.nextTick, который позволял гарантировать, что операция будет выполнена сразу без задержки.

Но nextTick не давал Ноду вставить обработку IO-колбеков между текущим кодом и кодом в некст-тике. setImmidiate разрешал все-таки ИО события обрабатывать.

Со времененм поддерживать совместимость с IE перестало быть настолько критичным, и setTimeout в V8 переделали так, что он стал работать без задержки.
+
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Andrey Listochkin
setImmidiate изначально задумывался как замена setTimeout(, 0), тк на практике из-за обратной совмести с IE все браузеры и рантаймы исполняли таймауты с задержкой.

Фактически выполнялся такой код:

setTimeout(() => …, Math.max(14, timeout))

т.е. минимальный тайймаут в браузерах и соответственно в V8 был 14 миллисекунд.

Это стало проблемой, когда в ноде через таймауты стали описывать цепочки задач. В node при этом было свое API - process.nextTick, который позволял гарантировать, что операция будет выполнена сразу без задержки.

Но nextTick не давал Ноду вставить обработку IO-колбеков между текущим кодом и кодом в некст-тике. setImmidiate разрешал все-таки ИО события обрабатывать.

Со времененм поддерживать совместимость с IE перестало быть настолько критичным, и setTimeout в V8 переделали так, что он стал работать без задержки.
Интересный экскурс в историю.
источник

OD

Oleh Diian in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Drachov
ну про браузер надо смотреть их сорцы. Самое ближнее что есть это chromium наверное.
Да я просто оправдание хочу себе сделать))
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Andrey Listochkin
setImmidiate изначально задумывался как замена setTimeout(, 0), тк на практике из-за обратной совмести с IE все браузеры и рантаймы исполняли таймауты с задержкой.

Фактически выполнялся такой код:

setTimeout(() => …, Math.max(14, timeout))

т.е. минимальный тайймаут в браузерах и соответственно в V8 был 14 миллисекунд.

Это стало проблемой, когда в ноде через таймауты стали описывать цепочки задач. В node при этом было свое API - process.nextTick, который позволял гарантировать, что операция будет выполнена сразу без задержки.

Но nextTick не давал Ноду вставить обработку IO-колбеков между текущим кодом и кодом в некст-тике. setImmidiate разрешал все-таки ИО события обрабатывать.

Со времененм поддерживать совместимость с IE перестало быть настолько критичным, и setTimeout в V8 переделали так, что он стал работать без задержки.
только вот я билдил v8, и там нет setTimeout.
Я всегда думал что эти функции реализуються окружением. Или нодой или браузером но не в v8.

Собственно донедавнего времени было и отличие между поведением цылка в ноде и в хроме.
источник

AM

Alexey M in NodeUA - JavaScript and Node.js in Ukraine
теперь осталось разобраться что всё таки выполняется в
фазах pending callbacks и  poll
если я правильно понимаю в poll выполняются колбеки которые переданы к АПИ ввода вывода - файлы и сеть, то-есть по факту все что не setTimeout, setImmediate, nextTick,
но эти setTimeout, setImmediate, в свои фазы выполняеются , а nextTick вообще между фазами
что же тогда в pending callbacks выполняется?
дока говорит кратко
This phase executes callbacks for some system operations such as types of TCP errors. For example if a TCP socket receives ECONNREFUSED when attempting to connect, some *nix systems want to wait to report the error. This will be queued to execute in the pending callbacks phase.

получается в poll I/O подключаения, в pending - ошибки (только ли ошибки?)
источник

AL

Andrey Listochkin in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Drachov
только вот я билдил v8, и там нет setTimeout.
Я всегда думал что эти функции реализуються окружением. Или нодой или браузером но не в v8.

Собственно донедавнего времени было и отличие между поведением цылка в ноде и в хроме.
хз что сказать. Я помню как все это обсуждалось командой Node в ныне почившем подкасте NodeUp в ~2011м году
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Andrey Listochkin
хз что сказать. Я помню как все это обсуждалось командой Node в ныне почившем подкасте NodeUp в ~2011м году
10 лет - это ж 0.6.x версия где-то. все могло измениться
источник

DD

Dmytro Drachov in NodeUA - JavaScript and Node.js in Ukraine
Alexey M
теперь осталось разобраться что всё таки выполняется в
фазах pending callbacks и  poll
если я правильно понимаю в poll выполняются колбеки которые переданы к АПИ ввода вывода - файлы и сеть, то-есть по факту все что не setTimeout, setImmediate, nextTick,
но эти setTimeout, setImmediate, в свои фазы выполняеются , а nextTick вообще между фазами
что же тогда в pending callbacks выполняется?
дока говорит кратко
This phase executes callbacks for some system operations such as types of TCP errors. For example if a TCP socket receives ECONNREFUSED when attempting to connect, some *nix systems want to wait to report the error. This will be queued to execute in the pending callbacks phase.

получается в poll I/O подключаения, в pending - ошибки (только ли ошибки?)
нашел, хорошую статью. Ладно если честно я не помню уже насколько хороша сама статья, но картинка лупа тут вроде лучше всего отражает действительность
https://blog.insiderattack.net/handling-io-nodejs-event-loop-part-4-418062f917d1
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Nechai
Тиииим, люди жалуются на метасрач, пригласи в  ГУЛАГ и ответь.
А то я тут пытаюсь обьяснить людям что это чат для проги, а ты дальше накидываешь.
"метасрач" - это похоже на отличное название альтернативы Gossip протоколу
источник

AM

Alexey M in NodeUA - JavaScript and Node.js in Ukraine
Dmytro Drachov
нашел, хорошую статью. Ладно если честно я не помню уже насколько хороша сама статья, но картинка лупа тут вроде лучше всего отражает действительность
https://blog.insiderattack.net/handling-io-nodejs-event-loop-part-4-418062f917d1
спасибо, отличный материал,
в том числе и эта ссылка в статье
There are some changes introduced in Node v11 which significantly changes the execution order of nextTick, Promise callbacks, setImmediate and setTimeout callbacks since Node v11. Read more: https://medium.com/@dpjayasekara/new-changes-to-timers-and-microtasks-from-node-v11-0-0-and-above-68d112743eb3

In Node JS implementation, process.nextTick callbacks and microtasks (e.g, promise callbacks) were executed between each phase of the event loop when the C++/JavaScript boundary is crossed. Therefore, all timer callbacks are executed in the timers phase of the event loop before the Promise callback is executed which resulted in the above output.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Подскажите, вот такую фигню выдало:
```
Error: certificate has expired
   at TLSSocket.onConnectSecure (_tls_wrap.js:1497:34)
   at TLSSocket.emit (events.js:315:20)
   at TLSSocket._finishInit (_tls_wrap.js:932:8)
   at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12) {
 code: 'CERT_HAS_EXPIRED'
}

```

это я просто пытаюсь подключится к WSS подключению.
Мне нужно как то сертификат приделать туда? или как?

Подскажите, впервые с таким сталкиваюсь
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
или туплю
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Подскажите, вот такую фигню выдало:
```
Error: certificate has expired
   at TLSSocket.onConnectSecure (_tls_wrap.js:1497:34)
   at TLSSocket.emit (events.js:315:20)
   at TLSSocket._finishInit (_tls_wrap.js:932:8)
   at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12) {
 code: 'CERT_HAS_EXPIRED'
}

```

это я просто пытаюсь подключится к WSS подключению.
Мне нужно как то сертификат приделать туда? или как?

Подскажите, впервые с таким сталкиваюсь
на сервере сертификат валидный?
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Nikita
на сервере сертификат валидный?
должен быть да.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Я просто немного не понял, как мне из приложения это сделать. Просто из браузера вроде работает
источник