hknovo 发表于 2013-7-15 10:55:16

英文站研究 优化wordpress mysql 的执行效率

本帖最后由 hknovo 于 2013-7-15 10:57 编辑

网站访问速度,也是影响GOOGLE 排名的一种因素之一。GOOGLE 还提供了 page speed 来检测代码。混世魔王的英文站研究,一般都是用WP的程序。但是,WP毕竟是BLOG,数据库达到几万片文章后,就特别慢。有的时候,为了页面多被GOOGLE 收录。就采用用随机参数。混世魔王英文站研究 之 优化wordpress mysql 的执行效率。例如,这一段分类随机的代码。在只有几百篇的文章下是执行正常的。
<?php
$rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
foreach( $rand_posts as $post ) :
?>
<li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
<?php endforeach; ?>

在几万片文章下,服务器直接 time out. http://files.blogcn.com/wp02/M00/01/4F/wKgKC05AtKoAAAAAAAAegGnRI_s218.jpg因为之前的随机是在几万篇文章中随机的,我们加入一个随机值,看看下面的代码。<font face="Tahoma, Verdana,"> <?php
$t1=microtime(true);
$rd=mt_rand(0,1000);
$myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
foreach($myposts as $post) :
echo microtime(true)-$t1."
";
setup_postdata($post);
?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?></font>网站能显示了。但是 MYSQL 的数据库查询值在 8 秒。http://files.blogcn.com/wp03/M00/01/CA/wKgKCk5AzgEAAAAAAAAsX2K3uZo997.jpg继续,优化。<font face="Tahoma, Verdana,"><?php
$t1=microtime(true);
$rand_posts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM $wpdb->posts))) ORDER BY id LIMIT 0,200");
echo microtime(true)-$t1."
";
foreach($rand_posts as $post ){?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<?php } ?></font>http://files.blogcn.com/wp02/M00/01/4F/wKgKC05Az8oAAAAAAAArey43laY920.jpg可以看到,上万的文章,随机输出200篇,查询 0.02 秒。执行效率得到大幅度提升。<?php
$t1=microtime(true);$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status= 'publish'"));

$randid = mt_rand(0,$wpcount-12);
$myposts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status='publish' and id>$randid limit 12");echo microtime(true)-$t1."<br>";
foreach($myposts as $post){
?><li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
<?php
}?>
转自 混世魔王博客

lion 发表于 2013-7-15 11:47:23

哈哈 魔王的文章都被转载到这里了:lol

阿虎 发表于 2013-7-15 11:50:03

如何检测自己的空间访问速度是否满足需要,有人知道吗?

hknovo 发表于 2013-7-15 14:40:15

本帖最后由 hknovo 于 2013-7-15 14:43 编辑

网站访问速度,也是影响GOOGLE 排名的一种因素之一。GOOGLE 还提供了 page speed 来检测代码。混世魔王的英文站研究,一般都是用WP的程序。但是,WP毕竟是BLOG,数据库达到几万片文章后,就特别慢。有的时候,为了页面多被GOOGLE 收录。就采用用随机参数。混世魔王英文站研究 之 优化wordpress mysql 的执行效率。例如,这一段分类随机的代码。在只有几百篇的文章下是执行正常的。
[*]
[*]<?php
[*]$rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
[*]foreach( $rand_posts as $post ) :
[*]?>
[*]<li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
[*]<?php endforeach; ?>
[*]
[*]

复制代码
在几万片文章下,服务器直接 time out

因为之前的随机是在几万篇文章中随机的,我们加入一个随机值,看看下面的代码。
[*]<font face="Tahoma, Verdana,"> <?php
[*]$t1=microtime(true);
[*]$rd=mt_rand(0,1000);
[*]$myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
[*]foreach($myposts as $post) :
[*]echo microtime(true)-$t1."
[*]";
[*]setup_postdata($post);
[*]?>
[*]    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
[*]<?php endforeach; ?></font>

复制代码
网站能显示了。但是 MYSQL 的数据库查询值在 8 秒

继续,优化。
[*]<font face="Tahoma, Verdana,"><?php
[*]$t1=microtime(true);
[*]$rand_posts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM $wpdb->posts))) ORDER BY id LIMIT 0,200");
[*]echo microtime(true)-$t1."
[*]";
[*]foreach($rand_posts as $post ){?>
[*]<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
[*]</li>
[*]<?php } ?></font>


复制代码
可以看到,上万的文章,随机输出200篇,查询 0.02 秒。执行效率得到大幅度提升。<?php
$t1=microtime(true);
$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status= 'publish'"));

$randid = mt_rand(0,$wpcount-12);
$myposts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status='publish' and id>$randid limit 12");
echo microtime(true)-$t1."
";
foreach($myposts as $post){
?>
<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
<?php
}?>麻烦上面扣分的,把我的T币还来,赚两币容易吗? 不加就算了,还给我减了

月光飞燕 发表于 2013-7-15 20:23:45

你不是魔王把

hknovo 发表于 2013-7-15 21:11:14

月光飞燕 发表于 2013-7-15 20:23 static/image/common/back.gif
你不是魔王把

当然不是,嘿嘿 。只是觉得好东西应该让大家都知道,月光也认识混世魔王?

lysk 发表于 2013-7-15 22:57:23

多谢分享。。。。。。。。。。。

happyduck 发表于 2013-7-16 00:23:36

几万篇文章啊 我没有想过啊 反正我是做不来的了 呵呵

goodfree 发表于 2013-7-16 11:10:37

数据库大了确实是个问题
页: [1]
查看完整版本: 英文站研究 优化wordpress mysql 的执行效率