过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯 # z4 N' j# y: N
* ?' T+ B: H- g6 ~

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

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

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

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

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

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


  1. / J( s5 B( x; f# G9 w7 t/ C" ?9 f
  2. <?php& L0 P0 v$ ^! H
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
    2 s7 v9 y- b' O! ^4 y- G
  4. foreach( $rand_posts as $post ) :. \5 T* O# y% Q0 O
  5. ?>
    , Z+ \) ?) N; ]
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
    $ M& x8 k+ E& N. H
  7. <?php endforeach; ?>
    . N6 O) y/ ^* C2 [7 j4 {( k- Y

  8. $ R0 B9 e  u, S
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php4 ]* F& J* Y& _, p2 m" d
  2. $t1=microtime(true);5 q6 n/ t/ i- p8 O
  3. $rd=mt_rand(0,1000);
    ( c2 k4 f' [: R' O; v# ?! T
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));0 b8 Q2 j1 d4 N) t2 I8 X/ W# a
  5. foreach($myposts as $post) :
    ( k  z* b& j: L2 _% C4 i* x& j
  6. echo microtime(true)-$t1."
    4 o! x" b( r! K( J- r
  7. ";
    * i- }, x; V. y  C# p
  8. setup_postdata($post);
    # S# k' A! S9 Z: N
  9. ?>
    & X4 {& K" q9 ^% h5 [
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    . o9 Q& ]" r2 V' M* G) l; D& U
  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
    8 x4 L9 m# u% I) ], L+ n5 H
  2. $t1=microtime(true);
    # m% J' R/ B: P4 E2 V; t
  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");
    * L: c; Q* T: ]
  4. echo microtime(true)-$t1."5 t: N6 P2 R  ~
  5. ";
    2 s0 K* S+ Y7 @( @
  6. foreach($rand_posts as $post ){?>
    9 X- p  k/ v; C6 w) n4 k
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>5 c- X5 c% i/ ?, y) I
  8. </li>$ A" r. a+ w* q' S# J$ U4 }1 \
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php' E1 u$ p; a) p7 h7 y0 p- M# y) D
$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));0 m& x3 m0 [: ?3 s
. G* o( U9 L8 H9 i
$randid = mt_rand(0,$wpcount-12);
" R: {. t  h* W+ ~' o$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>";9 g, f2 u( h8 [% G# U
foreach($myposts as $post){( ~# L0 W- K$ j, d3 g4 g  }5 X( f
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>9 `+ @0 d$ D, p5 B& o; p
<?php1 k* \6 V3 X. J$ i/ D
}?>


1 D+ d# e; g) c3 k" K3 B0 \+ }/ j轉自 混世魔王博客
3 v9 v" ?! u2 b! F
2 b8 D% m+ `+ ?& |8 t- J6 J3 a0 v( k

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了
. {) T6 b( g/ ?3 J' j5 q
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?$ W! _7 U2 J/ H' f
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯 . @. |& f$ l7 o4 O0 R7 L* n0 B( ?9 q, X

. B7 S8 ^9 F% I6 x- F$ \* }

網站訪問速度,也是影響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; ?>
  • . _* U# w- ~% {1 y+ M

/ H0 H* \1 @* G5 V+ E+ P[color=rgb(51, 102, 153) !important]複製代碼

4 U2 U* \. S, }4 Y# [

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


6 f: z* N+ I2 O; b- i+ n a.jpg
) A2 V; g' r' O+ M/ D% u

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

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

  • <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>
    9 O1 _. f/ l' d# _: ?+ W! o$ G

4 R. ^8 a, X0 p) ?* i
[color=rgb(51, 102, 153) !important]複製代碼
' I$ q5 j7 I# x9 M. A2 d. i

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

b.jpg
/ \5 a! T; r( \; ~
% w- d. ]/ t/ m" U, n; ~' f5 D  p

繼續,優化。

  • <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>2 Y- P7 \; f* b- G

2 G2 _- h1 f( ?

7 _3 b) t; e' W. C- Q4 ~複製代碼 c.jpg
; S- N! p5 z4 C* D+ \' l8 B! t

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

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

  1. <?php. P$ W# ?) O, l; b( d) v
  2. $t1=microtime(true);
    " B+ S! S* B& y3 ?7 ]5 p/ B
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
    / m+ z* [; K4 @- W. c" T
  4. 9 c0 M+ R8 Z8 L7 e, a# @
  5. $randid = mt_rand(0,$wpcount-12);
    * J' K" e8 x! _& K, p+ \3 ~4 {) y/ f
  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");5 |7 A) g/ \& ^# C( p6 l
  7. echo microtime(true)-$t1."
    & a% l, x7 G7 f, |! f: N! P
  8. ";
    # n5 ], B# e. H; ^
  9. foreach($myposts as $post){
    $ V' g( `# B/ p/ P
  10. ?>: p8 s. I) D* g
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    & g. E1 d1 t/ ~! m8 n# o: c9 D& g0 B
  12. <?php
    9 Q7 U- a1 r) `, t/ n7 q
  13. }?>
複製代碼

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


* H/ c4 {" q: I( z! r' ^4 c: H# Y" }; }! q+ e! X" u

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把 % P7 F8 `( h9 l
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23   P3 d! i. B; g, o
你不是魔王把
9 g- y% x8 k3 u
當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
2 Y1 h& v& e  ?& w4 N% ]" u) X  W1 p
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。9 Y9 C: Z, ?4 d
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵
+ f$ `0 A$ G6 ~; t, R
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題) n9 J) |1 l- B4 {0 R
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基跨境 數位編輯創業論壇

GMT+8, 2025-7-11 12:50

By DZ X3.5

小黑屋

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