вызов модуля() и производительность


Я использую module_invoke() много раз на главной странице для вызова большого количества блоков. Влияет ли это на производительность сайта? Спасибо.

 1
7
Author: kiamlaluno, 2011-03-27

1 answers

Module_invoke() по сути использует три функции: function_get_args(), function_exists() и call_user_func_array(). Поскольку он не вызывает никаких функций API базы данных, это не сильно влияет на производительность.
Использование module_invoke() позволяет писать код, совместимый с будущими версиями модуля или Drupal. Существует отчет об особенностях drupal.org который просит использовать другую схему для имен крючков; если это будет реализовано (это может произойти в Drupal 8), то код, который вызывает непосредственно крючки должно быть изменено.

В определенных случаях, когда (например) вы вызываете один и тот же хук, реализованный одним и тем же модулем много раз подряд, можно изменить код, чтобы сделать что-то похожее на:

  • убедитесь, что модуль реализует нужный вам крючок, один раз, в начале
  • вызывайте крючок напрямую, когда вам нужно значение, возвращаемое крючком

Это следует сделать, если модуль действительно вызывает один и тот же хук, реализованный из одного и того же модуль много раз подряд (что не исключает, что крючок вызывается в цикле).

Чтобы заметить, что module_invoke() нельзя использовать, когда один из параметров необходимо передать по ссылке. Существуют специальные функции, которые в таких случаях вызывают реализации хуков (например, comment_invoke_comment(), но эти функции вызывают хук, реализованный всеми модулями.

 0
Author: kiamlaluno, 2011-03-27 13:15:46