wordpress执行效率分析(一)
家宇学长说过,wordpress效率很低。
今日调测了一下,效率确实有点低
我的首页执行时间都到了1.5+秒。
来测试下,找出根源。
首先加上时间测试和内存测试代码
在index.php最前面放上
在最后面加上
好了 然后看看效果
我的首页占用了17M内存 执行时间1.58s
囧..
这个是别忘的..
不管是执行时间还是所占用的内存都远远低于wp
是什么问题呢?
我记得每次有人访问wp的话wp都会去联网检查更新
那先把联网部分禁用掉试试
更大了,平均值差不多也是这个。难道wp还写了死锁来检测网络连通?
还不太清楚,或许和服务器不稳定也有关系。
总之停止http外联不能加速
那试试吧插件关了. wp的插件机制是各种各样的action和filter
然后吧对应的函数暂存,需要用的时候再调出。
这个是吧插件关完的效果
稍微快了点
我们看看插件主要的代码
函数都放在了$wp_filter这个变量里面
然后有个$idx 查了下..那个idx和索引无关..只是唯一标识符..
也就是说..他是用了一个线性表存的. 插件多了的话..效率自然就低下了..
然后再进一步测试 发现在载入theme前只耗费了0.3s
把$GLOBALS[‘_endTime’]=microtime(TRUE);
改到theme的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还有的时间去哪里了???
继续测试。。
何不考虑下“缓存”,一般博客都不会时刻更新,更新(评论)的时候再生成首页?
p.jiaxu
7 1月 12 at 10:34 下午
恩..现在是有cache存在的 源码底部有显示信息..
不过生成还是慢
Dynamic page generated in 1.086 seconds
princehaku
7 1月 12 at 10:51 下午