Big Bug Ban

兴趣 践行 创新

wordpress执行效率分析(一)

 

家宇学长说过,wordpress效率很低。

今日调测了一下,效率确实有点低

我的首页执行时间都到了1.5+秒。

来测试下,找出根源。

首先加上时间测试和内存测试代码

在index.php最前面放上

$GLOBALS[‘_beginTime’] = microtime(TRUE);

在最后面加上

$GLOBALS[‘_endTime’]=microtime(TRUE); echo “\r\nMem:”.number_format(memory_get_usage()/1024,2).”KB”; echo “\r\nExecTime:”.($GLOBALS[‘_endTime’]-$GLOBALS[‘_beginTime’]);

好了  然后看看效果

before

我的首页占用了17M内存  执行时间1.58s

囧..

这个是别忘的..

image

不管是执行时间还是所占用的内存都远远低于wp

是什么问题呢?

我记得每次有人访问wp的话wp都会去联网检查更新

那先把联网部分禁用掉试试

stophttp

更大了,平均值差不多也是这个。难道wp还写了死锁来检测网络连通?

还不太清楚,或许和服务器不稳定也有关系。

总之停止http外联不能加速

那试试吧插件关了. wp的插件机制是各种各样的action和filter

然后吧对应的函数暂存,需要用的时候再调出。

这个是吧插件关完的效果

stopplugin

稍微快了点

我们看看插件主要的代码

function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {global $wp_filter, $merged_filters; $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority); $wp_filter[$tag][$priority][$idx] = array(‘function’ => $function_to_add, ‘accepted_args’ => $accepted_args); unset( $merged_filters[ $tag ] ); return true; }

函数都放在了$wp_filter这个变量里面

然后有个$idx  查了下..那个idx和索引无关..只是唯一标识符..

也就是说..他是用了一个线性表存的. 插件多了的话..效率自然就低下了..

然后再进一步测试  发现在载入theme前只耗费了0.3s

把$GLOBALS[‘_endTime’]=microtime(TRUE);

改到theme的head前加入

head

然后再foot里面再加入  时间又还是那么多了

也就是说中间部分占用了大量的资源

看看里面基本也就 只有个post

再检查看query的情况

首页最上面加入define(‘SAVEQUERIES’, true);

下面这样写
$total=0.0;

foreach($wpdb->queries as $i=>$j){

$total+=$j[1];

}

echo “\r\nMem:”.number_format(memory_get_usage()/1024,2).”KB”;

echo “\r\nQueryNums: “.count($wpdb->queries).” QueryTime:”.number_format($total,6).”s”;

echo “\r\nExecTime:”.number_format($GLOBALS[‘_endTime’]-$GLOBALS[‘_beginTime’],6).”s”;

整个首页代码应该是这样

queries as $i=>$j){
	$total+=$j[1];
}

echo "\r\nMem:".number_format(memory_get_usage()/1024,2)."KB";
echo "\r\nQueryNums: ".count($wpdb->queries)." QueryTime:".number_format($total,6)."s";
echo "\r\nExecTime:".number_format($GLOBALS['_endTime']-$GLOBALS['_beginTime'],6)."s";

?>

 

然后看看。。

首页有75条sql语句  但是执行时间只有0.194498s还有的时间去哪里了???

继续测试。。

Written by princehaku

7月 27th, 2011 at 11:27 上午

Posted in php

Tagged with

with 2 comments

2 Responses to 'wordpress执行效率分析(一)'

Subscribe to comments with RSS or TrackBack to 'wordpress执行效率分析(一)'.

  1. 何不考虑下“缓存”,一般博客都不会时刻更新,更新(评论)的时候再生成首页?

    p.jiaxu

    7 1月 12 at 10:34 下午

  2. 恩..现在是有cache存在的 源码底部有显示信息..
    不过生成还是慢
    Dynamic page generated in 1.086 seconds

    princehaku

    7 1月 12 at 10:51 下午

Leave a Reply