最近感觉域名比较乱和不规范和看到discuz把url静态化的rewrite放到htacess文件中觉得比较慢,于是想整理一下;
因为社区我基本不怎么管,没注意整理前运行速度如何.
在做完apache优化和域名优化后.感觉社区非常之慢.
以为是rewrite放到conf文件中写得有问题,于是看了n次apache rewrite_mod的说明文档,感觉已经考虑到的都考虑了.应该不可能.
又把rewrite处理log输出,看到解析也没有什么问题.因为有人跟我说,之前社区速度是不错的.所以我就没怀疑到社区有问题.
对于appache做最大性能的优化也没发现对于社区有什么提升.
在跟另一个同事讨论时,他说到在优化前已经出问题了,这时才想到把注意力转称到社区上来,
经过耗时监测.
rewrite+来回通讯大概在2秒左右,也就是余下的都是php解析总耗时了.感觉到rewrite启用后,大概会慢1秒左右?
而在页面代码中竟然耗掉4.5秒左右,觉得奇怪,因为有人跟我说,之前页面运行是毫秒级的...
最后终于查到是一个应用在每次页面解析时都生成一次sitemap.xml,是某人安装时,完全没设置,也不了解做什么用,装了就完事搞的.把这个插件去掉后,页面立刻少点5秒左右.
从此例子得到教训是:页面慢,应该立刻对不同的对象设置监测时间点,来定位耗时大户是谁然后再细化解决,即可弄明白.像我上面乱怀yi与相信非"专业"人的眼光,来排除,最终走了很大的弯路,因为要是直接认为问题出在apache上如它直接耗掉了5秒?那么apache这个定位起来就比较麻烦.不像php代码样,直接在某个代码行插入时间监测点就能看出来,这也是导致我花了几天时间想和试怎么监测apache各个动作的耗时
/*
* 用于监测分析页面任意部分解析时间
* 用法:首先在需要监测的页面define('qidiziTimeOn',1);然后在需要代码行放置时间基准点function_exists('qidiziTime') && qidiziTime(任意参数);页面结束解析前运行qidiziTime(0,1);输出调试结果,即可看到每个基准点与前一个基准点的耗时差,即可查出耗时最大的代码
*/
function qidiziTime($out = 0, $end =0) {
if (!defined('qidiziTimeOn')) return;
static $str = array();
static $mt = null;
static $init = null;
if (null === $mt) $init = $mt = microtime(1);
if ($end) {
$str[] = 'all=' .round(microtime(1) - $init, 4);
echo "<!--\n". implode("\n", $str) ."\n-->";
} else {
$t = microtime(1);
$str[] = $out .' : '. round($t-$mt, 4) .' (' .$t. ')';
$mt = $t;
}
}