过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯 2 E5 N& g" ^  h' H. y1 M
* W- }: h/ F" K* y

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

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

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

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

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

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

  1. + ~/ o; t. @. B4 L7 I* i" O' s7 @
  2. <?php
    0 q& J! M/ Z5 t' C) }1 g1 I
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
    ( E' V/ M# W/ e
  4. foreach( $rand_posts as $post ) :2 M* t4 v! F* D1 A
  5. ?>
    # H, W9 d: m- \! V  n0 a
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>4 w) E. L$ ?, q
  7. <?php endforeach; ?>( u( W, e) n" }" e; H5 s
  8. ; {+ E  p5 O) \& S* X& d
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php
    $ t5 P1 z2 x% I/ V2 `
  2. $t1=microtime(true);# R5 e$ F3 U- q6 J+ A/ W2 i
  3. $rd=mt_rand(0,1000);8 K7 R) x$ p* S7 ]7 X
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
    4 d/ P5 m% M! O( z' |
  5. foreach($myposts as $post) :
    0 E( \4 z+ w6 l& x6 a3 J
  6. echo microtime(true)-$t1."' }$ }+ j" l0 i: v% i; r
  7. ";
    3 W6 E+ y! |7 P
  8. setup_postdata($post);, r5 f+ K/ L. F2 w) _
  9. ?>7 c8 d4 o  c+ d5 {! O9 b  ]3 B: q& ?
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>$ G) \( W  t; K! Y- y
  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,]<?php5 e* l1 r, B# T
  2. $t1=microtime(true);: W7 j; D7 A. x( P2 ~, e
  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");1 H9 I4 t) A! H6 g$ N% [0 a4 ?
  4. echo microtime(true)-$t1."
    . h7 |$ n6 D) ]. F# D/ q+ {
  5. ";
    ; z; d1 n  |% V0 O9 _: {
  6. foreach($rand_posts as $post ){?>
    ) m+ {% ^- e. h; v- b
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    / Z; G9 w- L* Y
  8. </li>
      l7 O. P+ p& l' J) [, N7 q
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php
! _8 p% c+ K- o$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));# D7 {2 X9 o  J' B
1 {' x0 C; b; f8 @! s
$randid = mt_rand(0,$wpcount-12);
6 `0 v) K* j" M$ o3 h$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>";
1 Y  I0 D4 W. t7 D9 rforeach($myposts as $post){" d0 G' b% x1 @9 M
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
/ ~) j# _& I6 x" B  v <?php
+ h3 ~1 A) C* _5 r0 a& B}?>


' a+ F& d6 Y* X% x, g/ w  D: ?轉自 混世魔王博客& u' E8 j2 v' ^: F# x* S

: ]1 q5 h* ~; ]! O; a

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了3 E5 R8 Y% a# F
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?
! h+ q3 t1 `8 }# J+ d; y  g/ t3 o: O/ u
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯
! d2 _0 |8 O: f- ~, L
; k: z; ?' I1 W+ i$ Q% `& h* N7 [

網站訪問速度,也是影響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; ?>
  • # Y: R* ]& _: s* w( u
4 G0 d, x2 E1 U6 s+ L8 i  r
[color=rgb(51, 102, 153) !important]複製代碼

" j% Z4 ^2 `/ |, B' x$ _  k9 U

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

, L$ |" A! [$ l5 z# S! m) d" z" d. d1 D
a.jpg ( m; _" u6 s; U- E7 j: r. x( ?

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

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

  • <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>
    7 y3 K; y5 M4 u, C" N3 g2 o


9 p% F2 |1 \4 v  {[color=rgb(51, 102, 153) !important]複製代碼
1 H6 Z: n( A: v% `7 p; U2 g1 Q$ R

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

b.jpg 5 v1 V( e+ s# E

" r" O" ?% J8 `% \3 c) K4 j' Y2 }

繼續,優化。

  • <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>, |. `) t& N4 h, ~" M


/ E" {' p4 }. }% o
, s) E. P6 X* r/ `" F
複製代碼 c.jpg
( ~: {- B7 `2 r) j; [0 q

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

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

  1. <?php
    6 f) X# O5 L. N6 W7 r" g5 B- ^; B
  2. $t1=microtime(true);, l& ~' f, q& `$ Q. D
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
    1 ~% K( _& ~* f; Z! F5 v

  4. " y# Y% E3 a' J0 t3 U
  5. $randid = mt_rand(0,$wpcount-12);
    ! c' N  |* }: [) Q* D
  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 y" k+ M5 ]* d$ X: ]7 n+ W8 u
  7. echo microtime(true)-$t1."0 y  B" |' p0 O9 C" u! ?* x2 C6 M
  8. ";& e9 Z; T+ L6 _
  9. foreach($myposts as $post){
    " U; }4 w! r  I+ c5 o
  10. ?>
    ) ^, y7 E3 V' H2 I
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>+ o* ~$ O& ?: u
  12. <?php9 _7 Q* `6 Y+ P
  13. }?>
複製代碼

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

, R$ R* v4 |6 O

5 X2 y: |6 J: @) Z8 e

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把
. I2 G) R3 w; P' B
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
. k5 j4 h+ G" R* D& _你不是魔王把

1 d4 p7 r/ Y$ W( e( _當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王? $ G; s: m5 G1 y5 M0 K# Q' H
7 m4 g; o; N7 B4 M
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。
. `3 o8 B: [2 a2 n
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵: ~# Y$ T! g- ^  B  D; W- ?# E: e
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題, f( L. a3 a' \( V6 Y
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2024-11-26 05:48

By DZ X3.5

小黑屋

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