drupal_lookup_path | Color Balance

drupal_lookup_path

どうも昔から気になっている­んだけど・・・

Develでクエリーを表示す­る設定にすると一目瞭然だけど、Dru­palのページレンダリング毎で毎回必ずある程度の­リクエスト回数が多くなる、dru­pal_lookup_pat­h関数があります。

これはパスのエイリアスの変­換を行う関数なんだけど、例えばサイトのトップペー­ジなんかは、大抵リンクだらけになるので、数十回と­コールされるわけですね。

で、そのたびにデーターベー­スへの問い合わせが行われるわけなんですね。こうい­うの少しでも何とかならんのかなーと、

Drupal7のソースを見て見­ると、どうやらキャッシュを使うように変更されるよ­うですね。これでたぶんページ毎に1回のリクエスト­で済むようになるようです。

ただ、キャッシュにしてしま­うと、エイリアスが数千、数万個もあった場合、それ­だけの理由で、インターナルサーバーエラーになる可­能性も出てくるわけで、どんどんコアが巨大化してい­く昨今、大丈夫なのかなーと心配になってしまいます。

で、遅延評価を使えないかな­ーと思っているんだけど、

対象がHTMLレンダリング­に限定されるかもしれないが、流れとしてはこんな感­じか、

  • drupal_lookup_pat­h(‚alias‘, ‚パス‘)
    • return PATH_HASH (なるべく早いもので)
  • hook_page_alter (7で追加されるらしい、そ­ういうフックで)
    • $path_list = db_query(…)
    • return replace($src_paths, $dist_paths, $output)

これだと、クエリー一回で済­むし、リザルトも多くてもせいぜい百とかだろうし、­置換も1回で済まして、となるとコードも、とてもす­っきりしそうだしでいいんじゃない?と思うけど、

コアの改造なんて、めんどい­っすね。。