过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯 4 r1 N2 C5 Y9 J& k$ Z3 D
: x6 B$ s8 Z# q( e  v+ M" j

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

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

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

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

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

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

  1. $ |( [  ?0 m5 h/ V7 E$ l- E
  2. <?php
    : @& ]5 G. Q4 [; F
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
    7 Q7 @% q6 s) x- v6 j/ S5 K1 a
  4. foreach( $rand_posts as $post ) :/ d9 w+ Z/ g( p
  5. ?>
    ) P' J5 T. Q9 d! V( B3 z% F
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
      `/ ?, e( K7 Q$ _" E
  7. <?php endforeach; ?>
    : O* A' E6 d$ m3 ^

  8. ! n4 R1 V% {0 l7 u' ^' ^! B
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php+ m8 \' J- s( E0 O1 @# @$ c; ]
  2. $t1=microtime(true);
    . U. `! W# [+ j* o7 F" i' l( B
  3. $rd=mt_rand(0,1000);
    ; u# T+ y/ |* A
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
    2 N( L* b: A" H
  5. foreach($myposts as $post) :, `* e7 D' y7 r3 _. {( f
  6. echo microtime(true)-$t1."
    / G$ j  O( |% K2 m) L4 K( S. h9 N
  7. ";
    3 D4 Z: J/ S" E% M. g3 I4 @% I1 h) E
  8. setup_postdata($post);
    4 \; Q4 }# R1 T0 e; J
  9. ?>/ c- m5 W, Q2 |$ ?
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    / D, ~" U  r# H* ]
  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,]<?php6 l+ a' U4 g$ j& z- |
  2. $t1=microtime(true);
    / D* S7 d. `8 {( J0 _) q
  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");: {0 S/ v- H! P4 q8 y
  4. echo microtime(true)-$t1."
    " m, h" K$ ]% y9 `1 r: g
  5. ";+ m0 }$ c8 y1 P8 }7 f9 g. Y. K
  6. foreach($rand_posts as $post ){?>
    # X0 H: w! Q; L5 L
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    / l( k9 q, D; O1 E* @. H* x& b
  8. </li>
    . V0 ~# t8 H( _0 h
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php. z" R; T, v- r  J: v% v0 X6 ~
$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
6 U7 I3 W$ t9 _# W( R! s5 o 8 c6 I. k6 ]; Y# L! j* I5 B
$randid = mt_rand(0,$wpcount-12);
0 O2 N* x, C; v. X; F2 B$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>";- k, [5 y( `- d' J& S9 ^) F
foreach($myposts as $post){
- f) a( j( T7 W  S& c1 k2 I ?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>$ k6 p& l. s0 M  a+ u2 [% M+ P9 o
<?php
  x9 y, F! R8 M9 t$ f}?>


3 U$ U& E% n2 t  Y7 U% B$ [* T5 l轉自 混世魔王博客' L/ h2 u* D" Y* R. Z
% c% A2 l3 [4 U5 l* D8 @) o

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了
# n, }9 B5 J' M* ?
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?
- |5 d1 G  r) K) k$ P$ l; l* H
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯
, `* \! X5 m  ?/ N! |3 Z/ s# H
; L; o; [; j: b3 k

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

  • : ^& l, B3 _# @* a

7 Y2 ?& V- F2 Y: b+ h( ^4 v[color=rgb(51, 102, 153) !important]複製代碼

: ]1 y$ ]  j( I1 C

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

% o. y( I% z$ w/ w0 a
a.jpg * j9 M% d- q4 n+ k( Z

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

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

  • <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>& h5 p3 Q( I3 n


6 s% P4 c. \5 _  D[color=rgb(51, 102, 153) !important]複製代碼
$ {" Y# k0 R# H# Q& b9 A$ _) `

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

b.jpg , ?$ P+ ]! H" Q1 O8 ]6 J

8 l  }7 q( `* m1 `% C

繼續,優化。

  • <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>( o, {- b& ^) y. T5 H! _


# v& M4 V& A9 @4 D/ g1 F
. u) N  p8 c7 C6 w# H+ W* H# t
複製代碼 c.jpg
1 O- I3 |( c5 G

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

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

  1. <?php
    0 ?% r8 n! X) \- h  k
  2. $t1=microtime(true);
    2 |* u7 O' v1 r1 \
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));2 ?2 l* n" Y% p9 y0 p/ o
  4. ) R! U6 T  `  @0 N6 S) ~
  5. $randid = mt_rand(0,$wpcount-12);
    ! t/ u2 A  l% I1 F- k. E
  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 ?# E4 f7 }# j. i, f4 A
  7. echo microtime(true)-$t1."( R& `/ N' R/ ~) ], E
  8. ";
    7 N! [# u9 v1 w
  9. foreach($myposts as $post){
    ) x8 V% C% N1 R; X
  10. ?>
    & H$ q- {$ ]6 l. o( b
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    ! O% Z0 ]+ \3 [! b8 B. X! f
  12. <?php: R& t: _6 h% P& K$ _
  13. }?>
複製代碼

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

6 W$ B1 g6 o! w( j
. G$ V# s9 x/ q# I

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把 0 d9 C' c# a6 A& p+ \
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
0 }$ M" m9 f" G; @+ E) ~你不是魔王把
$ ]- U  d( L2 [2 |4 l
當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王? ; ?* x! A+ Y2 H$ B* {6 m* ]4 t

8 e7 }+ E7 b/ B) H9 e9 f
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。7 T8 j$ H" v4 b5 U1 h* F# e
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵) V- [0 V& _$ C: r7 [/ y
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題
& O4 g* a3 v, [7 D4 F/ _) {4 O
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2025-7-13 16:50

By DZ X3.5

小黑屋

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