169 похожих чатов

5 ответов

29 просмотров

насколько будет больше задержка если в функции возвращать промис и объявить ее async?

Petr Filippov
не знаю, сколько?

https://kanby.medium.com/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-return-await-%D0%BF%D0%BB%D0%BE%D1%85%D0%B0%D1%8F-%D0%B8%D0%B4%D0%B5%D1%8F-e87b70015f0c Меня довольно давно интересоавл этот вопрос и я пытался найти ответы в официальной документации но либо я плохо ищу либо там нет такой информации. Если кто в курсе, поделитесь пожалуйста ссылкой в комментарии. Тем не менее я нашел способ проверить эффективность данного подхода и как оказалось использование ключевого слова async и явное создание Promise объекта посредством выражения new Promise(...) внутри функции является не эффективным и вот почему. На основе примера "Почему использовать return await плохая идея" я создал тестовый файл и проверил выполнение кода таким образом: // promise-hooks.js const hooks = require("async_hooks"); const fs = require("fs"); let indent = 0; module.exports = hooks.createHook({ promiseResolve(asyncId) { const indentStr = " ".repeat(indent); fs.writeSync(1, `${indentStr}resolved: ${asyncId}\n`); }, init(asyncId, type, triggerAsyncId, resource) { const eid = hooks.executionAsyncId(); const indentStr = " ".repeat(indent); const dt1 = `${indentStr}${type}(${asyncId})`; const dt2 = `trigger: ${triggerAsyncId}`; const dt3 = `resource: ${resource.parentId}`; const dt4 = `execution: ${eid}`; fs.writeSync(1, `${dt1}, ${dt2}, ${dt3}, ${dt4}\n`); }, before(asyncId) { const indentStr = " ".repeat(indent); fs.writeSync(1, `${indentStr}before: ${asyncId}\n`); indent += 2; }, after(asyncId) { indent -= 2; const indentStr = " ".repeat(indent); fs.writeSync(1, `${indentStr}after: ${asyncId}\n`); }, destroy(asyncId) { const indentStr = " ".repeat(indent); fs.writeSync(1, `${indentStr}destroy: ${asyncId}\n`); }, }); Тестовый код (без использования async) const hooks = require("./promise-hooks.js"); hooks.enable(); function asyncTest() { return new Promise((resolve, reject) => resolve()); } asyncTest(); Результат выполнения: PROMISE(2), trigger: 1, resource: undefined, execution: 1 resolved: 2 Теперь обявляем асинхронную функцию с помощью async const hooks = require("./promise-hooks.js"); hooks.enable(); async function asyncTest() { return new Promise((resolve, reject) => resolve()); } asyncTest(); Результат выполнения: PROMISE(2), trigger: 1, resource: undefined, execution: 1 PROMISE(3), trigger: 1, resource: undefined, execution: 1 resolved: 3 resolved: 2 before: 2 PROMISE(4), trigger: 3, resource: undefined, execution: 2 after: 2 before: 4 resolved: 2 resolved: 4 after: 4 Как видим из примера в результате получаем два Promise-объекта, похоже ключевое слово async неявно оборачивает возвращаемый результат функции в Promise, что по сути является неэффективным. Поэтому в случае явного использования new Promise(), ключевое слово async лучше не использовать и наоборот.

🅰️nimeCoder
https://kanby.medium.com/%D0%BF%D0%BE%D1%87%D0%B5%...

Не читал многабукаф, но неужели лишний промис с уже известным значением прямо очень зпгрузит процессор?

ベラルサエド ❄️
Не читал многабукаф, но неужели лишний промис с уж...

🤷‍♂️ думаю когда их много то мб разица будет

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта