WordPress提供了一些功能函数可以轻松地显示数据库查询的统计信息,这些信息可以公开地显示在网页中,或者隐藏在源代码中,更或者只有你自己可以看到。效果如下:
WordPress主要提供了两个统计函数
1、网页加载时查询数据库的次数:?<?php echo get_num_queries(); ?>
2、服务器端完成这些查询所花费的时间:?<?php timer_stop(1); ?>
可以使用3种方式在网页中显示:
1. 公开地显示查询的统计信息
如果你觉的你的服务器或空间的处理速度好,或者想让你的访问者看到这些查询统计信息的话,你可以将这些统计信息公开显示在页面中:(本博就是把下方代码加在footer.php中,效果看上图)
- <p?style="text-align:center;color:#3A90F2">查询次数<?php?echo?get_num_queries();?>?次,总耗时?<?php?timer_stop(1);??>?秒.</p>
2. 将统计信息显示在源代码中,而不出现页面的内容中
如果你不想将统计信息显示在页面上供访问者查看,但又想自己可以知道这些统计信息,那么你可以通过html的注释将结果只显示在源代码中(PS:大家也可以从源代码中查看的哦!):
- <!--?查询次数<?php?echo?get_num_queries();??>次,?耗时?<??php?timer_stop(1);??>?秒?-->
3. 统计信息只有你自己登录了后可以看到
该方法是第二种显示的优化方法,只需博客管理员登录后就可以查看查询统计信息,访问者是无法查看的:
- <?php
- if?(current_user_can('level_10'))
- {
- ????echo?'查询次数<!--?'?.?get_num_queries()?.?'?次,耗时?'?.?timer_stop(1)?.?'?秒?-->';
- }
- ?>
延伸拓展
如果想查看具体查询了数据库哪些内容,可以用如下解决方法:
1、首先在 wp-config.php
里添加如下代码
- define('SAVEQUERIES',?true);
2、在 footer.php 里添加如下代码:
- <?php
- if?(is_user_logged_in())
- {
- ????global?$wpdb;
- ????echo?"<pre>";
- ????print_r($wpdb->queries);
- ????echo?"</pre>";
- }
- ?>
代码解读:
- ?
if (is_user_logged_in())
用于判断当前访客是否已登录,也可以用if (current_user_can('level_10'))
来判断是否为管理员登录,目的是为了不让游客查看到这些数据,此代码可省; global $wpdb;
定义全局变量$wpdb
,这是Wordpress默认的数据库类;<pre></pre>
?将结果嵌套在HTML标签?<pre>?内;print_r($wpdb->queries);
输出各次数据库查询的信息。
刷新首页或日志页,可看到类似如下的输出结果:
- Array
- ???(
- ???????[0]?=>?Array
- ???????????(
- ???????????????[0]?=>??SELECT?SQL_CALC_FOUND_ROWS??wp_posts.*?FROM?wp_posts??WHERE?1=1??AND?wp_posts.post_type?=?'post'?AND?(wp_posts.post_status?=?'publish'?OR?wp_posts.post_status?=?'private')??ORDER?BY?wp_posts.post_date?DESC?LIMIT?0,?10
- ???????????????[1]?=>?0.0003960132598877
- ???????????????[2]?=>?require,?wp,?WP->main,?WP->query_posts,?WP_Query->query,?WP_Query->get_posts
- ???????????)
- ???????[1]?=>?Array
- ???????????(
- ???????????????[0]?=>?SELECT?option_value?FROM?wp_options?WHERE?option_name?=?'nuodou_header_code'?LIMIT?1
- ???????????????[1]?=>?0.0013589859008789
- ???????????????[2]?=>?require,?require_once,?include,?get_header,?locate_template,?load_template,?require_once,?get_option
- ???????????)
最后的活儿就得自己分析了,看看哪些是可以删除,哪些是可以改进的,以减少数据库查询次数。
评论