どうも昔から気になっているんだけど・・・
Develでクエリーを表示する設定にすると一目瞭然だけど、Drupalのページレンダリング毎で毎回必ずある程度のリクエスト回数が多くなる、drupal_lookup_path関数があります。
これはパスのエイリアスの変換を行う関数なんだけど、例えばサイトのトップページなんかは、大抵リンクだらけになるので、数十回とコールされるわけですね。
で、そのたびにデーターベースへの問い合わせが行われるわけなんですね。こういうの少しでも何とかならんのかなーと、
Drupal7のソースを見て見ると、どうやらキャッシュを使うように変更されるようですね。これでたぶんページ毎に1回のリクエストで済むようになるようです。
ただ、キャッシュにしてしまうと、エイリアスが数千、数万個もあった場合、それだけの理由で、インターナルサーバーエラーになる可能性も出てくるわけで、どんどんコアが巨大化していく昨今、大丈夫なのかなーと心配になってしまいます。
で、遅延評価を使えないかなーと思っているんだけど、
対象がHTMLレンダリングに限定されるかもしれないが、流れとしてはこんな感じか、
- drupal_lookup_path(‚alias‘, ‚パス‘)
- return PATH_HASH (なるべく早いもので)
- hook_page_alter (7で追加されるらしい、そういうフックで)
- $path_list = db_query(…)
- return replace($src_paths, $dist_paths, $output)
これだと、クエリー一回で済むし、リザルトも多くてもせいぜい百とかだろうし、置換も1回で済まして、となるとコードも、とてもすっきりしそうだしでいいんじゃない?と思うけど、
コアの改造なんて、めんどいっすね。。