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

  [复制链接]
查看: 664   回复: 8
发表于 2013-7-15 10:55:16 | 显示全部楼层 |阅读模式
本帖最后由 hknovo 于 2013-7-15 10:57 编辑

网站访问速度,也是影响GOOGLE 排名的一种因素之一。GOOGLE 还提供了 page speed 来检测代码。

混世魔王的英文站研究,一般都是用WP的程序。

但是,WP毕竟是BLOG,数据库达到几万片文章后,就特别慢。

有的时候,为了页面多被GOOGLE 收录。就采用用随机参数。

混世魔王英文站研究 之 优化wordpress mysql 的执行效率。

例如,这一段分类随机的代码。在只有几百篇的文章下是执行正常的。


  1. <?php
  2. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
  3. foreach( $rand_posts as $post ) :
  4. ?>
  5. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
  6. <?php endforeach; ?>

复制代码

在几万片文章下,服务器直接 time out.

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

因为之前的随机是在几万篇文章中随机的,

我们加入一个随机值,看看下面的代码。

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php
  2. $t1=microtime(true);
  3. $rd=mt_rand(0,1000);
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
  5. foreach($myposts as $post) :
  6. echo microtime(true)-$t1."
  7. ";
  8. setup_postdata($post);
  9. ?>
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  11. <?php endforeach; ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
复制代码

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

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

继续,优化。

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,]<?php
  2. $t1=microtime(true);
  3. $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");
  4. echo microtime(true)-$t1."
  5. ";
  6. foreach($rand_posts as $post ){?>
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
  8. </li>
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
复制代码

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

可以看到,上万的文章,随机输出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
}?>


转自 混世魔王博客

评分

参与人数 1T币 +6 收起 理由
月光飞燕 + 6 認眞參與

查看全部评分

发表于 2013-7-15 11:47:23 | 显示全部楼层
哈哈 魔王的文章都被转载到这里了英文站研究 优化wordpress mysql 的执行效率
回复 支持 反对

使用道具 举报

发表于 2013-7-15 11:50:03 | 显示全部楼层
如何检测自己的空间访问速度是否满足需要,有人知道吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 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; ?>


[color=rgb(51, 102, 153) !important]复制代码

在几万片文章下,服务器直接 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>


[color=rgb(51, 102, 153) !important]复制代码

网站能显示了。但是 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 秒。

执行效率得到大幅度提升。

  1. <?php
  2. $t1=microtime(true);
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));

  4. $randid = mt_rand(0,$wpcount-12);
  5. $myposts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status  ='publish' and id>$randid limit 12");
  6. echo microtime(true)-$t1."
  7. ";
  8. foreach($myposts as $post){
  9. ?>
  10. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
  11. <?php
  12. }?>
复制代码

麻烦上面扣分的,把我的T币还来,赚两币容易吗? 不加就算了,还给我减了



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1T币 +1 收起 理由
shawn + 1 鼓勵

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-7-15 20:23:45 | 显示全部楼层
你不是魔王把
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-15 21:11:14 | 显示全部楼层
月光飞燕 发表于 2013-7-15 20:23 英文站研究 优化wordpress mysql 的执行效率
你不是魔王把

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

回复 支持 反对

使用道具 举报

发表于 2013-7-15 22:57:23 | 显示全部楼层
多谢分享。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-7-16 00:23:36 来自手机 | 显示全部楼层
几万篇文章啊 我没有想过啊 反正我是做不来的了 呵呵
回复 支持 反对

使用道具 举报

发表于 2013-7-16 11:10:37 | 显示全部楼层
数据库大了确实是个问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则