过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯 + g+ k2 o- D! u
4 C3 l7 G& r; r8 o/ [* n5 l! w

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

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

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

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

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

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

  1. $ {/ G) n7 p5 T) ?3 x! a$ }) o
  2. <?php" h1 `+ t0 V1 h7 I
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");0 I/ M4 d9 n* |& @4 H6 e4 U8 g
  4. foreach( $rand_posts as $post ) :4 t; A' ^% A% w5 H  A9 x
  5. ?>& `% q( Q# o3 p( q
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>) v. V1 {" O4 d' w
  7. <?php endforeach; ?>
    3 W6 O/ Z1 e% C. b/ s4 s% u" _% O
  8. 8 p3 [1 h' S3 C* N
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php3 J% b  J+ e3 ^1 }* {5 m% P
  2. $t1=microtime(true);
    , z6 i7 }0 z% T/ v! w# r4 j
  3. $rd=mt_rand(0,1000);
    6 r8 @# O# C8 P% V
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
    . _% C0 m% R- y6 W1 G6 @7 h1 Z5 }$ s
  5. foreach($myposts as $post) :. c9 v" [7 o1 n6 e9 i  u" N' I: s
  6. echo microtime(true)-$t1."8 L6 C9 D0 j! V. r  s: B9 `* G# ?
  7. ";( m- l' E) b" o* A
  8. setup_postdata($post);
    / a) {1 p9 [0 v2 n
  9. ?>% g7 k3 ~1 j- i, v) I
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    ) @9 ?: o' s7 V% D- z1 `6 [
  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
    2 a  X4 Z3 S6 U+ t  P& A3 r! N. l2 P
  2. $t1=microtime(true);* m1 `% ~6 t& z. s+ s0 N- }
  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");. M# `% z/ o+ {# p2 Q& C5 J
  4. echo microtime(true)-$t1."6 }+ d4 y1 ~$ I8 @- q5 A+ J
  5. ";
    , R5 C3 `4 K( h+ b/ i/ A
  6. foreach($rand_posts as $post ){?>- A) [3 h: f6 V) G5 o  V! N
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    8 C, ^: }4 ]5 S
  8. </li>+ E- m* b( Z5 a( ]6 z$ Y
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php
# e& u7 s$ @$ J$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));" e8 l. w0 q5 {5 r

: V# a; T% B' l  m9 K+ e$randid = mt_rand(0,$wpcount-12);/ O$ ?) C, B; i* l
$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>";
, T: |2 [% d& }4 m, lforeach($myposts as $post){5 M$ o2 q- E3 }8 K) U  h1 P
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
+ G/ j. ^9 p4 `) R  H  i <?php& }& r) I: ~# {' D) L
}?>


3 L( m/ U( {2 V- C1 D, o& C0 R轉自 混世魔王博客& v% c% ~! y+ u( U$ F0 P& v6 b

$ Q$ Y( g5 {/ O. K( d: A2 L/ L1 q- d

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了
; G$ L7 [; v' C: O; W& T/ [& b* H
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?
) \7 r# {# d+ O4 d# u6 T
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯 ( S  L4 i2 ]( h) R6 i* i! Y) a( g
# _6 b! E2 C% c, Q5 _: j  S, v5 `) H

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

  • 0 \* s! J) F3 {! o

5 g) Q0 k  x6 [" t5 m0 x[color=rgb(51, 102, 153) !important]複製代碼
2 s1 y( K* Q# ~

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


5 p: _4 [& r# Z& J- W0 b0 i a.jpg
$ T. c& e6 y8 O5 N# I- c1 Y6 k

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

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

  • <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>
    / T) G1 R: M/ W8 x5 d


5 ~9 |6 k! `; A8 s[color=rgb(51, 102, 153) !important]複製代碼
6 a% e5 t8 F+ @" M! m2 T

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

b.jpg
# E2 B) m* _" O0 x) H* O1 E/ @) M
2 n2 q: _  [6 Q

繼續,優化。

  • <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>
    ; I( e9 G) B' z! T

. j/ F8 G5 \; p9 m

7 A" T! L# W! s9 a4 H2 A: x複製代碼 c.jpg
' l4 h( z- X* S7 Q

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

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

  1. <?php
    * H4 B& H: u* C4 H- x- N
  2. $t1=microtime(true);. _! ~: F, A. L9 x3 L& G) G
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));' [4 G7 a6 P7 |  D) B( \0 k- U. ]
  4. ' z8 Q" i9 F+ t8 Q  j& h
  5. $randid = mt_rand(0,$wpcount-12);8 F/ H+ t: n0 x5 u
  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 `- B8 k) M/ C$ ~* f
  7. echo microtime(true)-$t1."
    ! ~0 k7 `; p# a" `
  8. ";
    7 v( X; S% i. b9 s$ p; L
  9. foreach($myposts as $post){+ Y! `# T4 d9 j; p5 t
  10. ?>. O. H2 @# E2 o2 q: r: Z
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    # V0 S* D2 E6 b4 F- R7 y
  12. <?php/ Q3 Z1 j/ q. C
  13. }?>
複製代碼

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

" E1 f  x0 i6 o2 @2 h' I
4 A) `, S) o% L0 I7 c- X7 s

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把 & w/ T) U8 ^1 [
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
* ?7 `" N- k! j2 T2 l你不是魔王把

9 R3 B/ O+ k* \# P" _" Q當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
- `2 F4 k: G* ^. I8 n7 O6 d1 n; _
) B! c( @" _/ Z: B% t5 y
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。
( ~0 n9 m7 j% z
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵
! ^, V6 w: Z& L8 o* Q- d
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題7 `% Q/ y. G5 _! t7 \0 D
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

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

By DZ X3.5

小黑屋

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