这个是以前写的,现在也贴出来吧。
我们在选择主题和使用插件的时候,除了考虑到美观和功能方面,还需要考虑到性能问题,如何WordPress的运行性能呢?
这里提供三种方法,安全性依次增加,方法一说的比较详细,内容也多点,方法二和三都是在方法一的基础上,不过又加了点东西罢了。
WordPress为我们提供了三个函数:timer_start()、timer_stop()和get_num_qeries(),就像它们的名字所暗示那样,它们的功能分别是开始计时、计时结束和查询数据库的次数。
方法一
我们想知道生成页面所用的时间,只需要在页面结束处调用timer_stop即可,一般在主题文件中footer.php中添加以下代码即可,非常简单
<?php printf('生成本页面用时: %s 秒';, timer_stop()); ?>
网上有的说要在Wordpress自己当前使用的主题的header.php文件中最后面加入代码
<?php timer_start(); ?>
其实,这是完全不必要也不应该的,因为wp-settings.php中调用了timer_start函数,即在每次页面请求的时候都会自动调用timer_start函数,开始计时。如果head.php中调用time_start()的话,全局变量global $timestart会被两次赋初值,以后调用的为初值,根据测试,head.php中的调用要比wp-settings.php的晚,所以如果在head.php也调用timer_start的话,最终得到的$timetotal和实际要测试的运行时间的一定会有差距。
有时候还想看下生成页面时查询数据库的次数,一般来说查询数据库的次数越多,性能就会越差,就在footer.php中加入
<?php echo get\_num\_queries(); ?>
就行了。
最终两个函数合起来就是这样
<?php printf('生成本页面用时 %s 秒,查询 %d 次.';, timer\_stop(), get\_num_queries()); ?>
本博客就是这样写的,看下面就知道了。
在Linux下,对wordpress进行字符串搜索一下,就能知道timer_start()、timer_stop()和get_num_queries(),三个函数是如何定义的,
timer_start()和timer_stop()在wp-settings.php中定义,贴下代码
timer_start()
/**
* PHP 4 standard microtime start capture.
*
* @access private
* @since 0.71
* @global int $timestart Seconds and Microseconds added together from when function is called.
* @return bool Always returns true.
*/
function timer_start() {
global $timestart;
$mtime = explode(‘ ‘, microtime() );
$mtime = $mtime[1] + $mtime[0];
$timestart = $mtime;
return true;
}
timer_stop()
* @param int $display Use ‘0’ or null to not echo anything and 1 to echo the total time
* @param int $precision The amount of digits from the right of the decimal to display. Default is 3.
* @return float The "second.microsecond" finished time calculation
*/
function timer\_stop($display = 0, $precision = 3) { //if called like timer\_stop(1), will echo $timetotal
global $timestart, $timeend;
$mtime = microtime();
$mtime = explode(‘ ‘,$mtime);
$mtime = $mtime[1] + $mtime[0];
$timeend = $mtime;
$timetotal = $timeend-$timestart;
$r = ( function\_exists(‘number\_format\_i18n’) ) ? number\_format\_i18n($timetotal, $precision) : number\_format($timetotal, $precision);
if ( $display )
echo $r;
return $r;
}
get_num_queries()在wp-includes/functions.php中定义
functions.php
/**
* Retrieve the number of database queries during the WordPress execution.
*
* @since 2.0.0
*
* @return int Number of database queries
*/
function get\_num\_queries() {
global $wpdb;
return $wpdb->num_queries;
}
另外wp-includes/wp-db.php中也有timer_start()和timer_stop()的定义,和wp-settings.php中的有差别,不过差别不大,看注释应该是调试用的,也贴下代码
/**
* Starts the timer, for debugging purposes.
*
* @since 1.5.0
*
* @return true
*/
function timer_start() {
$mtime = microtime();
$mtime = explode(‘ ‘, $mtime);
$this->time_start = $mtime[1] + $mtime[0];
return true;
}
/**
* Stops the debugging timer.
*
* @since 1.5.0
*
* @return int Total time spent on the query, in milliseconds
*/
function timer_stop() {
$mtime = microtime();
$mtime = explode(‘ ‘, $mtime);
$time_end = $mtime[1] + $mtime[0];
$time\_total = $time\_end – $this->time_start;
return $time_total;
}
方法二
另外在搜索字符串的时候,发现在某些主题中就也经加入了生成时间计时的代码,如默认主题、经典主题, 不过是以注释的方式写在代码中的,所以浏览页面的时候看不到,查看源代码就能看到了,贴下默认主题的代码wp-content/themes/default/footer.php
<div id="footer" role="contentinfo">
<!– If you'd like to support WordPress, having the "powered by" link somewhere on your blog is the best way; it's our only promotion or advertising. –>
<p>
<?php printf(__('%1$s is proudly powered by %2$s', 'kubrick'), get_bloginfo('name'),
'<a href="http://wordpress.org/">WordPress</a>'); ?>
<br /><?php printf(__('%1$s and %2$s.', 'kubrick'), '<a href="' . get_bloginfo('rss2_url') . '">' . __('Entries (RSS)', 'kubrick') . '</a>', '<a href="' . get_bloginfo('comments_rss2_url') . '">' . __('Comments (RSS)', 'kubrick') . '</a>'); ?>
<!– <?php printf(__('%d queries. %s seconds.', 'kubrick'), get_num_queries(), timer_stop(0, 3)); ?> –>
</p>
</div>
方法三
将这些信息放在源代码中,一般情况下不会被人注意到,所以在一定程度上可以隐藏服务器的信息(对某些博客用户来说隐藏自己的信息是必要的),又能看到自己的服务器的运行性能。其实还有一种优化的方法,这种方法,只有博客用户也即管理人员登录后才能看到这些信息,非常简单,加个if判断语句就行了,请看代码
<?php if (current_user_can('level_10')) : printf('| 生成本页面用时 %s 秒,查询 %d 次.', timer_stop(), get_num_queries());?>
<?php endif; ?>
声明:上面所有代码和测试信息都是基于WordPress-2.9.2。