I am using
module_invoke() many times in the front page to invoke lots of block. Does this effect the site performance? Thank you.
I am using
module_invoke() is essentially using three functions:
call_user_func_array(). As it doesn't invoke any database API function, it doesn't influence the performance a lot.
module_invoke() allows to write code that is compatible with future versions of the module or Drupal. There is a feature report on drupal.org which asks to use a different schema for the hook names; if that would be implemented (it could happen in Drupal 8), then the code that invokes directly the hooks should be changed.
In specific cases, where (for example) you are invoking the same hook implemented by the same module many times in row, it is possible to change the code to do something similar to:
- verify the module implements the hook you need, once, at the beginning
- call the hook directly when you need the value returned by the hook
This should be done if the module is really invoking the same hook implemented from the same module many times in row (which doesn't exclude the hook is being invoked in a loop).
To notice that
module_invoke() cannot be used when one of the parameters needs to be passed by reference. There are specific functions that invoke hook implementations in that cases (e.g. comment_invoke_comment(), but those functions invoke the hook implemented by all the modules.