• 30
  • 11月

一直都感觉wp的效率不太行,一直没去看看到底wp那里慢了。今天有点时间就抽空让我来看看wp首页以及文章页面到底运行了哪些sql吧。 :arrow:

一直都是听说wp每次打开都会有大量的请求,昨天查了一下,首页有近20条的sql查询(不包括我用了memcached缓存的),文章页的话有差不多25条查询,把sql输出一下看傻了。这啥啊各种联表各种表达式。 :s1liuxue

运行wp的get_links_list()函数,监视一下sql可以看到:

SELECT *  , IF (DATE_ADD(link_updated, INTERVAL 120 MINUTE) >= NOW(), 1,0) as recently_updated  , UNIX_TIMESTAMP(link_updated) AS link_updated_f  FROM wp_links  INNER JOIN wp_term_relationships AS tr ON (wp_links.link_id = tr.object_id) INNER JOIN wp_term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE 1=1 AND link_visible = 'Y'  AND ( tt.term_id = 2 ) AND taxonomy = 'link_category'    ORDER BY link_name ASC

这句东西。就我现在这种小表都需要0.1秒的查询时间,表大了的话,会很搞笑的。所以各位用wp,而且有使用get_links_list()这个函数来获取友链的同学赶紧换其他方式吧。不要用这个函数了。

假如你的友链关系不复杂,像我一样没有做分类什么的,直接用下面这句就行了,不明白wp官方为什么会将link_visible这个字段采用字符型做记录,虽然建了索引但mysql跑去扫全表了。 :s1gouxuelt

select * from wp_links where link_visible='Y' order by link_name asc

于是从查询到显示,可以在页面上搞这么一段:

#global $wpdb;	//这应该写不写无所谓
$links_wpdb = $wpdb->get_results("select * from wp_links where link_visible='Y' order by link_name asc");

if( $links_wpdb ) {
        foreach( $links_wpdb as $k=>$v ) {
                $tmpstr .= '< li >< a title="'.$v->link_description.'" href="'.$v->link_url.'" target="'.$v->link_target.'">'.$v->link_name.'< /a >< / li >'; //注意去掉一些地方的空格
        }
        echo $tmpstr;
}

假如你的服务器安装了memcached,那么可以这样,加了缓存减少数据库压力 :s1niuyao

#$mc = new Memcache;
#$mc->connect('服务器ip', '端口号');
if( $mc ) {
        $tmpstr = $mc->get("mc_links");
}
if( !$tmpstr ) {
        #global $wpdb;
        $links_wpdb = $wpdb->get_results("select * from wp_links where link_visible='Y' order by link_name asc");

        if( $links_wpdb ) {
                foreach( $links_wpdb as $k=>$v ) {
                        $tmpstr .= '< li>< a title="'.$v->link_description.'" href="'.$v->link_url.'" target="'.$v->link_target.'">'.$v->link_name.'';
                }
        }
        $mc->set('mc_links', $tmpstr, MEMCACHE_COMPRESSED, 3600*24);
}
echo $tmpstr;

唔…以上就是做了24小时缓存的友情链接了,有个弊端就是,你现在添加的新的友链,有可能需要等待24小时才能在页面上看到。不动wp程序,不写hook,只能让他有个延迟时间了,假如希望时间短点,把上面的3600*24改成你想要的秒数即可。

好像就一条语句就能写篇博客了…那就这样吧,不写了 :s1ruo

PS:有空得把表情处理一下,服务器链接数也好多..

PS2:小写一段,高手无视即可。

PS3:帝都怎么还不给我下雪啊!!! :s1dahong :s1dahong :s1dahong
 

» 你可以 留言, 或者 返回 到你的站点.

14 回复

  1. 灰机仔 :

    8O

    [回复]

    油饼小明猪 回复:

    @灰机仔, 8O 8O

    [回复]

  2. lovee :

    WP就是效率太差了所以一直想换成MovableType,8过那个玩意儿的教程神马的就比WP少多了于是一直狠不下心 :pstaisi

    [回复]

    油饼小明猪 回复:

    @lovee, MovableType?没用过,这类东西就连wp这种大家都做成这样,估计MovableType的效率也不会太好吧.. :pstaisi

    [回复]

    lovee 回复:

    @油饼小明猪, MT的最大卖点之一就是远低于WP的资源占用,而且MT不需要插件自己就支持页面静态化等等功能,事实上MT的效率还真是高于WP,包括数据库的调用等等 :pstaisi 就是教程太少了不忍心出手

    [回复]

    油饼小明猪 回复:

    @lovee, 这个….你自己去看源码然后写教程吧 :)

    [回复]

    lovee 回复:

    @油饼小明猪, 有这个水平咱就不愁MT没有教程了 :pstaisi

  3. Vallmo :

    SQL数据库,好高深啊……

    [回复]

    油饼小明猪 回复:

    @Vallmo, 其实我写的东西真是一点都不深,深了没人看。

    [回复]

  4. 内大臣 :

    :| 技术贴马克~~

    [回复]

    油饼小明猪 回复:

    @内大臣, 马车入手了??

    [回复]

    内大臣 回复:

    @油饼小明猪, 估计要明天才能到上海 :pstwuli

    [回复]

  5. 夜光 :

    所以才有很多人用缓存或静态插件…

    [回复]

  6. 全友家具 :

    国庆节了,工作总要放一下,牙还是很痛!继续努力,生活充满挑战!

    [回复]

发表评论:

:| :cry: :idea: :o 8) :arrow: :tt :8| :x :hong :( :han :) :P :love :lol: :twisted: :? :evil: :D :dao :mrgreen: ;) :?: :!: :roll: :moe :oops: :|| :jing 8O :pstaisi :pstganbadie :pstwuli :pstheihua more »

 

 


0.0850510597229