вызов модуля() и производительность
Я использую module_invoke()
много раз на главной странице для вызова большого количества блоков. Влияет ли это на производительность сайта? Спасибо.
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(), но эти функции вызывают хук, реализованный всеми модулями.