ノードオブジェクトの束をロードして、それらにいくつかのアルゴリズムを適用する必要があります。
通常は内部で反復とnode_load()
を使用しますが、ノードオブジェクトをロードするための(パフォーマンスといえば)より良い方法があるかどうか疑問に思っていました。
アルゴリズムの結果をページごとにキャッシュできれば十分だと思います。
node_load()
は、ノードオブジェクトが一部の関数に渡される場合は特に、ノードオブジェクトをロードするための望ましい方法です。
Drupal 6では、node_load()
の結果はデフォルトでローカルに静的変数にキャッシュされることに注意してください。束をロードする場合ノードの場合、node_load($id, NULL, TRUE)
として関数を呼び出す方が良いです。何らかの理由で、コードがnode_load()
の連続呼び出しで同じノードをロードできることが確実な場合は、 Xがnode_load()
を呼び出した後、静的な値をリセットすることを検討できます。
関数に渡される_$revision
_パラメータがNULL
でない場合、node_load()
の結果はキャッシュされません。
node_load()
から取得した値をキャッシュすることは可能であり、コードはその目的で独自のキャッシュを使用できます。ノードが更新されると、キャッシュは無効になります。これには、ノードが以前のリビジョンに戻される場合も含まれます。独自のモジュールにキャッシュを実装するよりも、サードパーティのモジュールのノードをキャッシュするモジュールを使用する方が良いでしょう。
Drupal 7では、node_load()
とnode_load_multiple()
の両方が_$reset
_パラメータを受け入れ、インスタンス変数として保持されているノードキャッシュをクラス NodeControllerDrupalDefaultEntityController によって実装されるインスタンス変数を使用するDrupalから作成されます。これは、エンティティコントローラーに必要なデフォルトメソッドを実装するクラスです。
Drupal 6.で私が知る他の方法はありません。
Drupal 7にはnode_load_multiple()があり、単一のクエリで複数のノードをロードできます(+フック。複数のノードに対して単一のクエリを実行することもできます)。さらに、読み込まれたエンティティをキャッシュできる Entity cache プロジェクトがあります。