今天照着《WordPress执行效率问题》一文检查了一下我的Blog首页执行的SQL语句。具体方法那篇文章里讲了,就是在wp-config.php文件里添加define('SAVEQUERIES', true);,再在footer.php文件的尾部加上一句<!-- <?php var_dump($wpdb->queries); ?> -->。刷新Blog首页,就可以在页面源代码的尾部找到整个页面执行过程中所提交的所有SQL查询语句了。数组里每一项都包含一个string和一个float,string存储查询语句,float存储查询时间。先看看查询时间,看看哪个占用的时间很长;再看看查询语句,看看哪个可以省略,哪个可以cache起来的。
我的Blog打开的WordPress自带的cache功能,首页需要32次查询,执行时间1s多一点。查了一下,我的Latest Comments插件占了9项。给它加了个cache功能,现在首页已经降到23次查询,执行时间也降到1s以内,8错8错。
很疑惑,为啥他说他有6万篇文章。我大概看了一下,不到500篇文章吧。而且他的大多数查询和我一样,耗时只有零点零零几秒,而查询wp_posts表的几条耗时很多。我的SQL查询语句耗时最多的也就0.01秒。好奇怪,难道wp_posts表被塞了太多垃圾?
Update:昨天研究了一下WordPress的cache功能,给我的wp-statistics
插件增加了输出cache命中次数的功能。
WordPress的cache统计有Cold Cache Hits,Warm Cache Hits,Cache Misses三项。Cold Cache Hits指从cache文件或者数据库中读取的,Warm Cache Hits指cache已经读到内存的,Cache Misses指没命中。不看不知道,我的Cold和Warm命中分别有160次和534次,哇,这要节约多少查询啊。
我的Cache Miss次数是14,觉得有点太高了一点,于是在/wp-includes/cache.php文件里做了个小hack,让它把miss的$id输出出来。检查了一下,有3项是options的,其中2项属于Ultimate Tag Warrior
,1项属于Audio player
。另外11项是pages,一个空ID和首页10篇文章的10个ID。
看了一下WordPress的源代码,在get_post()函数里,WP通过检查该post_id是否在pages的cache里来判断其是否为page,这才导致了10篇文章进行了10次查询导致了10次miss。由此看来,WordPress对"page"也不薄,起码给page做了cache,而post则享受不到这种待遇。
UTW的2项是UTW新版才加进去的option,UTW好像没有在升级的时候自动建立这两个option。在后台进入UTW选项页,点save,发现数据库里没更新。没办法,只好把那两项选中后更新,好了,数据库里有了。然后再返回来,取消选中那两项。而Audio player的那一项,则是在版本升级的过程中,这个option被删除了。而插件每次启动的过程中,通过判断这个选项是否存在来决定是否执行升级程序。所以,又有了一个miss。唉,这样看来,老外的插件设计的也不咋地啊。
好了,Cache Miss降至11,首页SQL查询次数降至18次,执行时间降至0.6s,已经差不多被我榨干了,再想优化,就该祭出WP-Cache
插件了。
那ㄧ堆東西如何解讀啊?....^^
如何打开WordPress自带的cache功能?
yskin,啥时候来个系统点的wp的优化教程啊,同意的跟帖,呵呵-__-
今天申请www.google.com/a/,两个小时收到拒绝邮件,郁闷!
呵呵,一样啊
现在我都是一发申请邮件,再点收件箱就能看到拒绝信了,貌似我的域名还是邮箱被设成自动回覆拒绝信了。惨...
我申请成功了,第一次直接访问去申请,没成功,第二次用了自由门代理访问,然后信息都填了美国,站点内容添了education,就立马成功了。
开启 WP 自带 cache 功能的方法是在 wp-config.php 中加入一句
define('ENABLE_CACHE', true);
不过,除非你的博客没开启注册,否则不要使用,官方有公布这个东西有点漏洞。
照着步骤做了,怎么我在网页的源代码里没有显示那些sql查询语句和那些string,float的?我的是在本地作测试的。
只是在后面多了“<!-- 29 queries. 0.518 seconds. -->”这句话。
yskin,指导一下!!!
"只是在后面多了“<!-- 29 queries. 0.518 seconds. -->”这句话。"
这句话错了,实际上是一句话也没有多出来。
顺便问一下,EzSQL究竟是个什么东西来的,刚刚在寻找答案的时候找到这个生词,搜索一下,中文没有介绍,英文就说是 在php中能够很容易的使用数据库的东东。
下了一个下来,也不知怎样使用,能具体介绍一下吗?直觉跟上面的问题有关,不知是不是真的?
不知道了,我这里可以正常显示。
在这里查到:
这是一个数据库抽象层。应该是类似于JDBC、ODBC,用于PHP程序的。下面可以支持多种数据库,而上面提供一种接口给程序。当你使用这个数据库抽象层的时候,不再使用专用于一种数据库的函数,而是使用ezSQL提供的函数。这样,程序要从一种数据库换用另一种数据库的时候,只要换一个ezSQL文件就可以了。
这样看来,我们的WordPress只要经过简单地修改就可以使用Oracle咯?嘿嘿,Blog数据量低,或许那些整天采集的网站,MySQL可能顶不住,需要用Oracle吧。
WP—Cache不好使,干脆用WP-Write HTML全部静态化吧
看了你的文章很受启发, 但我还是不改动这些地方了, 占点就占点, 你用什么空间的呀, 速度还不错
有空来支持支持小站啊,
http://blog.2i2j.com
做个广告手下留情哦