过期域名预定抢注

 找回密碼
 免费注册

英文站研究 優化wordpress mysql 的執行效率

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯
" d% g( k5 E* J6 m, n) r' a5 x  o. R2 g! c9 _& c

網站訪問速度,也是影響GOOGLE 排名的一種因素之一。GOOGLE 還提供了 page speed 來檢測代碼。

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

但是,WP畢竟是BLOG,數據庫達到幾萬片文章後,就特別慢。

有的時候,為了頁面多被GOOGLE 收錄。就採用用隨機參數。

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

例如,這一段分類隨機的代碼。在只有幾百篇的文章下是執行正常的。

  1. ( v8 ^- T7 w( F
  2. <?php+ F: g, @& N. D1 s8 E
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
    6 g/ ?+ S7 L. E8 j& ^
  4. foreach( $rand_posts as $post ) :' ?& i  U2 ?0 i: i3 J' Z
  5. ?>% `/ [0 ?; n0 f4 x: Y- W  ?( t
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>/ g+ D! \' J1 Q  `: W3 V# ]
  7. <?php endforeach; ?>) E, t- C1 E  Y  p/ T
  8. 8 ^1 b7 y. z# s1 \
複製代碼

在幾萬片文章下,服務器直接 time out.

因為之前的隨機是在幾萬篇文章中隨機的,

我們加入一個隨機值,看看下面的代碼。

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php4 n2 z, m2 k" Q! i+ W
  2. $t1=microtime(true);* I  a) l2 d5 B5 C4 E9 H$ N
  3. $rd=mt_rand(0,1000);6 F! d7 k: V, i/ j: o, j2 o0 T
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));4 ~; j1 U0 m7 S0 ^! t
  5. foreach($myposts as $post) :5 k& M/ j% L" E) W
  6. echo microtime(true)-$t1."
    " y  h' d- s% u
  7. ";0 K/ S0 x/ j4 T2 v( B0 U% B( N
  8. setup_postdata($post);# [* o( V5 {6 ?0 W+ S& z
  9. ?>, y* I& _% s9 z+ K
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    ' Q8 ]/ w1 f% ]' K' k% }! e
  11. <?php endforeach; ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

網站能顯示了。但是 MYSQL 的數據庫查詢值在 8 秒。

繼續,優化。

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,]<?php+ E: F) o. P) \
  2. $t1=microtime(true);. i7 E4 D  `" U  g5 I7 ^! G
  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");
    3 B4 G7 i/ o2 \" e- h. P
  4. echo microtime(true)-$t1."% l  e& [( ?* C  g7 G4 L
  5. ";% J) M; g, {: g- d/ |
  6. foreach($rand_posts as $post ){?>
    6 l5 R5 C+ V; O
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>. J5 H" d; H# o/ ?8 v$ t0 l6 E# G% Z
  8. </li>
    ! g8 p: K' j$ S$ ^& B7 \. M7 C
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

可以看到,上萬的文章,隨機輸出200篇,查詢 0.02 秒。

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

<?php
' G7 h2 B+ e) I" z( d, s$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
6 {$ B- ~: i3 C
2 I: R$ A4 t: q" g7 p$randid = mt_rand(0,$wpcount-12);/ }# Z. h: w; M5 p% l, t
$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>";  ^! Y) I) m( J& h9 Q
foreach($myposts as $post){  Q3 e7 z5 N7 r  w
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
8 U& `+ K1 p$ u. B4 o4 G <?php, [  r& Y# H5 K. h0 t5 S' S
}?>

1 f" c/ X; X( @- K' T% `
轉自 混世魔王博客, q# R  @$ N. B2 R# y6 e
* L5 T0 U, S# x' s; M( w4 M

評分

參與人數 1點點 +6 收起 理由
月光飞燕 + 6 認眞參與

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了, ^1 K0 N( L# F8 z, F' q: a* E+ O
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?
* c' T! e% L7 a. q9 R% P1 D$ A; y* {) b$ e
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯 * Q& S, x+ B% {: h; O

* f% b. \4 _* c9 Y( P( l" w

網站訪問速度,也是影響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; ?>

  • ; C, t% ]$ n- G/ {

0 H( j2 A7 \4 B. b& a5 `[color=rgb(51, 102, 153) !important]複製代碼
) M; X; C. o- X" k4 N' k

在幾萬片文章下,服務器直接 time out


$ ^$ ?+ p: o4 W a.jpg ! o7 w+ S; Y" z3 ^3 W6 R$ _

因為之前的隨機是在幾萬篇文章中隨機的,

我們加入一個隨機值,看看下面的代碼。

  • <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>
    # x8 N# k! E( |1 |* L$ n( w

3 A( [* ^/ {7 Y0 k; B' b
[color=rgb(51, 102, 153) !important]複製代碼
) |/ @* w" k( T! B, H- j

網站能顯示了。但是 MYSQL 的數據庫查詢值在 8 秒

b.jpg 5 t9 ~$ I& b0 Y' l# H6 t3 }+ ?0 ^
0 [& w. y: ~  Q4 v6 u

繼續,優化。

  • <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>
    : l2 y0 v; E; Y' R8 T


+ {2 l! u+ I: T# |
) g! l; \% q/ S1 s
複製代碼 c.jpg 4 b8 J  w: L% V; p7 S9 Y

可以看到,上萬的文章,隨機輸出200篇,查詢 0.02 秒。

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

  1. <?php8 p6 S, R, J2 ^( p9 U
  2. $t1=microtime(true);+ g% V4 s" \5 {0 Y+ v" J6 K7 D/ v( a
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));9 ?3 i* n/ ^6 Z' T
  4. 7 f( Q( q- l- ?- Y# }# J+ \9 g8 _
  5. $randid = mt_rand(0,$wpcount-12);
    2 u6 w( N7 H* l* k
  6. $myposts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status  ='publish' and id>$randid limit 12");
    ( G1 Y& d3 A2 r
  7. echo microtime(true)-$t1."8 v0 [5 [8 ]6 G% ~
  8. ";
    , l+ b, @  `* F
  9. foreach($myposts as $post){8 x' \! x5 g* P0 f$ b0 k
  10. ?>& f4 B1 U3 f  S, X7 K6 p
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    . W$ X  j4 O" }3 @9 G' L
  12. <?php
    # _5 N" M  d: ]3 C% s* Q0 R# ]1 L
  13. }?>
複製代碼

麻煩上面扣分的,把我的豬毛還來,賺兩幣容易嗎? 不加就算了,還給我減了

# y% `! C- i# T. O( v, r5 S2 |

, G+ Y, F$ |5 M# Z) T$ x

評分

參與人數 1點點 +1 收起 理由
shawn + 1 鼓勵

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把
3 }, {- P( c8 }
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
4 [" J9 ^3 |  b2 F0 S7 E  b/ D你不是魔王把
/ E0 X8 D( w* O
當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
, z% E1 Q. ]8 x
; T5 \' D, i3 f; H8 o
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。
  a" p5 ]8 f* {8 Q/ d$ D* }4 U
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵  ]5 p" y. i9 Z) j* R7 j# `
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題
. q5 {) W: F" `1 d1 Q; F7 Z; v
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

过期高净值品牌域名预定抢注

4um點基跨境網編創業社區

GMT+8, 2024-11-26 02:45

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表