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

5 ответов

33 просмотра

насколько будет больше задержка если в функции возвращать промис и объявить ее 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%...

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта