2016-04-30 2 views
1

Есть ли штраф за исполнение при использовании функций обратного вызова (в JavaScript), против использования его синхронно?Предел производительности JavaScript callback-функции

Например:

method(function(result){}); 

Вместо

var result = method(); 

Edit: А если есть накладные введены функции обратного вызова, я хотел бы знать, почему.

Заранее благодарен!

+0

Я провел несколько тестов с простым вычислительным механизмом и обнаружил, что асинхронные обратные вызовы немного медленнее, чем синхронные. Но вы должны понимать причины того, что они используются, а ответ - параллелизм больше, чем производительность. Они медленнее, потому что они проходят через EVENT LOOP. –

+0

Спасибо! Я отредактирую свой вопрос, потому что мне любопытно, почему накладные расходы на производительность. Редактировать: Я вижу, что вы обновили свой комментарий, с объяснением, спасибо! – gillesC

ответ

3

Это крошечные крошечные накладные расходы для использования функций обратного вызова при синхронном вычислении по сравнению с возвратом.
Да, обратные вызовы могут использоваться синхронно. Выезд CPS; или по причинам согласованности в API.

Эти служебные данные возникают из-за накладных расходов, связанных с функцией и поддержания стека вызовов, и поскольку вы часто используете блокировки в качестве обратных вызовов, для их создания также требуется небольшая накладная.

Но это будет микро-оптимизация, сопоставимая с заменой v * 2 на v << 1 (по соображениям производительности).
Если вам нужно оптимизировать такие вещи в своем коде, у вас есть некоторые серьезные проблемы в структуре вашего приложения.

Единственная проблема, которая возникает при одновременном вызове обратных вызовов, - это возможность в какой-то момент превысить максимальный размер стека.

+0

Небольшое примечание: Этот вопрос возник из моего любопытства. Это не связано с плохими навыками программирования: D. И спасибо за ваш вклад! – gillesC

+2

Я не подразумевал плохое программирование. Я просто попытался охватить всю тему для всех, кто читает этот ответ. – Thomas

Смежные вопросы