查看WordPress运行性能

这个是以前写的,现在也贴出来吧。

我们在选择主题和使用插件的时候,除了考虑到美观和功能方面,还需要考虑到性能问题,如何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(&#8216; &#8216;, microtime() );
   
$mtime = $mtime[1] + $mtime[0];
   
$timestart = $mtime;
   
return true;
  
}

timer_stop()

* @param int $display Use &#8216;0&#8217; 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(&#8216; &#8216;,$mtime);
   
$mtime = $mtime[1] + $mtime[0];
   
$timeend = $mtime;
   
$timetotal = $timeend-$timestart;
   
$r = ( function\_exists(&#8216;number\_format\_i18n&#8217;) ) ? 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(&#8216; &#8216;, $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(&#8216; &#8216;, $mtime);
   
$time_end = $mtime[1] + $mtime[0];
   
$time\_total = $time\_end &#8211; $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。

孤独的北山羊 /
Published under (CC) BY-NC-SA in categories wordpress  tagged with 查询次数  运行性能