加速blog:优化WordPress程序效率

这里本质上要谈的还是优化数据库的效率,不过是改写WordPress的代码使得降低数据库查询次数。

get_permalink函数

get_permalink函数非常好用,get_permalink($id)便能直接得到文章ID为$id的永久链接,所以在显示文章列表中常常用到。比如类似下面这个显示最近10篇文章列表的函数,很多人都用到了吧:

<?php
function get_recent_posts () {
  global $wpdb, $tableposts;
  $request = "SELECT * FROM $tableposts WHERE post_status = 'publish' ";
  $request .= "ORDER BY post_modified DESC LIMIT 0, 10";
  $posts = $wpdb->get_results($request);
  $output = '';
  foreach ($posts as $post) {
    $post_title = stripslashes($post->post_title);
    $permalink  = get_permalink($post->ID);
    $output .= '<li><a href="' . $permalink . '">' . $post_title . '</a></li>';
  }
  echo $output;
}
?>

但不知道有多少人知道调用上面这个函数将产生11次的数据库查询?你只看到了一次?另外10次就在get_permalink的调用里面,不信你去读一读get_permalink函数的实现。阅微堂以前的数据库查询次数高达60多,就是这玩意儿弄出来的,我随便改了一下,就降了30次(我有3个列表 :) )。

解决办法就是修改get_permalink的实现,毕竟很多人的permalink结构都很简单。也没有必要真的去修改get_permalink的源代码,这样升级起来比较麻烦。另外写一个类似的函数,每次需要时使用这个新的函数即可。

WordPress效率问题剖析及重写WordPress这里还有蛮多,其它的以后遇到了再过来加。

查看更多关于的内容。

你可能感兴趣的
相关文章

5条留言 -> 跳到留言表格

  • At 2008.01.07 10:01, cosbeta said:

    当初为了不调用这个函数(删除缓存用),我想了好多办法,这样调用很容易造成多级循环的对数据库进行嵌套查询,效率那是非常的低

    • At 2008.06.09 01:15, Charles said:

      get_permalink这个函数何止一次数据库查询啊。
      按照推荐的/%year%/%monthnum%/%postname%来算的话,那个函数调用一次,需要3次数据库查询。你那个例子,要31次数据库查询。
      但是这个函数却保证了对每一个博客都能正确生效。
      给别人写插件的话不可避免的要用这个的。

      • At 2008.06.09 02:32, Charles said:

        我发现了,实际上情况并不总是那么糟糕,如果在the loop里面调用get_permalink的话,由于使用了缓存,所以,不会增加新的数据库查询。但是在侧边栏插件的话,那个函数真的很恐怖。我按照你说的去优化了一下,直接节省了42%的query数量。

        • At 2008.09.24 11:00, 天涯行客 said:

          解决办法就是修改get_permalink的实现
          具体如何修改?请具体讲讲

          • At 2008.09.24 11:11, zhiqiang said:

            我用的方法是另外写一个get_permalink的替代函数get_permalink_ster,由于我的permalink比较简单,所以这个函数内容就是 return get_settings("home").'/posts/'.$post->post_slug.".html"类似的。

            然后在需要使用get_permalink的地方都改为调用get_permalink_ster。

            可能还有更高级的方法,你可以咨询你楼上。

          (Required)
          (Required, not published)

            B | I | U | D | 添加链接 | 插入引用 | 插入代码 | 插入表情 | | + | ?
          guest | 注册 | BBS | 管理 | English | 繁體 | https
          Loading...
          Loading...
          Loading...