web-dev-qa-db-ja.com

node_load()パフォーマンスと代替手段

次のクエリを使用して、特定のコンテンツタイプの最後のXノードをリストするカスタムモジュールを作成しました。

_SELECT n.title, r.teaser, r.timestamp
FROM node n
INNER JOIN node_revisions r ON r.vid = n.vid
INNER JOIN term_node tn ON tn.nid = n.nid
INNER JOIN term_data t ON t.tid = tn.tid
WHERE t.name= 'breaking_news'
AND n.status = 1
ORDER BY n.nid DESC LIMIT 25
_

次に、node_load($nid)を実行して、内部に画像と音声ファイルがあるかどうかを確認します。たとえば、

_$mynode = node_load($queryresutl->nid);
if ($mynode->field_efe_audio[0]['filepath']) {  
  $audio = 'yep, has audio'; 
}
_

しかし、私はnode_load()がパフォーマンスキラーになる可能性があることを読んだので、これがtrueであり、モジュールのフィールドをチェックする代替手段があるかどうか疑問に思いますか?

3
atom

まず、 node_load() を使用するとスクリプトが遅くなることを確認します。それが本当に確かな場合は、次のいずれかを行うことができます。

  • 1- nid列とindex_audio列を持つuse_audioテーブルを作成します。ノードcreation/update/deleteでこのテーブルを更新できます。次に、このテーブルをクエリして、特定のノードにオーディオがアタッチされていることを確認します。そのようなチェックを集中的に行う必要がある場合にのみ、私はそのソリューションを使用します

  • 2-インスタンスでnidetidとしてフィールドテーブルに直接クエリします。field_data_field_efe_audioテーブルがFALSEまたは実際のデータを返すかどうかを確認します

5
silkAdmin