web-dev-qa-db-ja.com

module_invoke()とパフォーマンス

多くのブロックを呼び出すために、フロントページでmodule_invoke()を何度も使用しています。これはサイトのパフォーマンスに影響しますか?ありがとうございました。

1
enjoylife

module_invoke() は本質的に3つの関数を使用しています:function_get_args()function_exists()およびcall_user_func_array()。データベースAPI関数を呼び出さないため、パフォーマンスに大きな影響はありません。
module_invoke()を使用すると、モジュールまたはDrupalの将来のバージョンと互換性のあるコードを記述できます。フック名に別のスキーマを使用するよう要求するdrupal.orgの機能レポートがあります。それが実装される場合(Drupal 8で発生する可能性があります))、フックを直接呼び出すコードを変更する必要があります。

(たとえば)同じモジュールによって実装された同じフックを連続して何度も呼び出す場合、コードを変更して次のようなことを行うことができます。

  • 最初に必要なフックがモジュールに実装されていることを確認します
  • フックから返された値が必要なときにフックを直接呼び出す

これは、モジュールが実際に同じモジュールから実装された同じフックを連続して何度も呼び出している場合に行う必要があります(これにより、フックがループで呼び出されていることが除外されません)。

パラメータの1つを参照で渡す必要がある場合は、module_invoke()を使用できないことに注意してください。その場合にフック実装を呼び出す特定の関数があります(例: comment_invoke_comment() )が、これらの関数はすべてのモジュールによって実装されたフックを呼び出します。

0
kiamlaluno