过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯
7 s, X4 n4 G/ x5 h! ^. W4 i5 e) {. [) T2 T" f

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

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

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

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

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

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

  1. + F4 M1 w3 Z$ ]' s5 B7 [$ i; c- h* J
  2. <?php
    # b( W6 b4 `0 d  s5 e) W
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");0 `% {' f& h# V2 k
  4. foreach( $rand_posts as $post ) :' ^! h9 c8 l# K, Q. `# z7 z
  5. ?>
    ! a1 ~* |  Q' i. [1 K
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>9 g, C; C7 S% T( S% t
  7. <?php endforeach; ?>% Z. y: t) [, J

  8. ! q6 m+ r1 {1 C0 R
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php8 I" D) A. w8 Q# X* |+ |& t
  2. $t1=microtime(true);
    , }0 Q8 ^; l( G/ u# [
  3. $rd=mt_rand(0,1000);7 W9 s5 C! B2 @% X+ f
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));
    $ p  a9 K# y0 b
  5. foreach($myposts as $post) :( f4 H  g/ O8 R# C) e
  6. echo microtime(true)-$t1."
    4 }* }, F* Z, l' S9 q7 A
  7. ";
    ; j6 K- _; r0 W4 @
  8. setup_postdata($post);
    1 Z) l; R6 J  A; J9 c6 J/ U
  9. ?>4 P$ P$ R8 T2 E5 e6 x% u( `
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    : L# W& w& ?6 @9 w6 d$ z5 P
  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
    # I3 X1 P* m# J- {& |9 r+ d5 `
  2. $t1=microtime(true);, P6 ^4 o9 J  N0 ]( m5 @# F
  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");
    $ R# r7 L  j  f/ I% I% q0 ~! V
  4. echo microtime(true)-$t1."& r9 Q- ]7 w9 P& i3 H$ J
  5. ";* t* P$ ?( v8 h& i5 s# E8 A. S
  6. foreach($rand_posts as $post ){?>* u0 V% L' p% `6 l
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    . X! Q5 \4 ]2 z( Y$ }1 t
  8. </li>
    + Z3 `* `9 T" ~- E. f; c
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php
. C( f0 d) A% r/ P0 q$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));3 }+ H+ T& F3 V
7 Y- @. p6 T- H2 ]- G0 M
$randid = mt_rand(0,$wpcount-12);
5 |# ?. ^+ l. 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>";
) ~; q# l3 }1 lforeach($myposts as $post){
6 d# Y8 p3 w( d3 l0 v- @ ?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>: \! W1 y, g' N% n+ ?0 n0 p0 F
<?php
9 k) h" J& W% O! {) {+ V}?>

) f' Y0 ]) G' E3 y
轉自 混世魔王博客2 b( X: p* u0 ~0 Z

! k- j; B+ b- u# b  L

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了" M( K  f* N2 d3 E
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?
0 X, P( Y" H* r  {% \
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯
- E/ K) x' Y- v; u3 v% U$ J) L4 D. W1 S# r( l2 q

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

  • 7 [/ ^/ |, u  B+ i/ z4 _; L
4 _) S2 U4 ]+ |7 W+ R4 p& |6 \  y
[color=rgb(51, 102, 153) !important]複製代碼

* g: e/ y. m3 k

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

' A) T% @8 n1 r1 r1 p
a.jpg
" g% j0 h2 p! D+ I  B

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

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

  • <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>* k& f0 g7 e, \( f; A3 b- Y( R


5 I% a; f: }. J3 G3 h6 R[color=rgb(51, 102, 153) !important]複製代碼
' o/ c0 \# G8 A, ^7 v

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

b.jpg
" P1 Z- u& \, i, z+ m7 x& X* k% I, k% l/ q9 P: ]& B

繼續,優化。

  • <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>8 _( f! p( j/ Q' R5 r

& ^6 h# p5 P% I- R0 Y- r4 a
4 G9 J" t5 x/ _9 g* S, n1 ]
複製代碼 c.jpg 7 `7 \9 {& D0 {! U$ g

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

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

  1. <?php; X2 V8 B5 m5 K# z9 _+ o* n
  2. $t1=microtime(true);( H( i1 b% L, j1 Z( `
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
    ! a& j/ h6 s7 p) v1 o: h8 C5 f

  4. ; n- q' v6 q6 V- _9 p/ l7 ]. r0 O
  5. $randid = mt_rand(0,$wpcount-12);& W4 x' n$ d5 A& ]
  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");
    1 n! G) n& N. z0 D! Q4 n: U9 R3 G
  7. echo microtime(true)-$t1."9 @, q( S% `+ W- Z' k
  8. ";. A! C" [/ H% v+ P* l& {* f+ ?: L4 j
  9. foreach($myposts as $post){
    " \, K; x! J/ K0 u# q7 g- U2 i
  10. ?>: x: C+ }* S3 C8 `
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    ( @! N7 x1 ~9 ]+ U% K. r0 V
  12. <?php9 ~; j! y* c: f" {
  13. }?>
複製代碼

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


+ a: U% r' A' I* Q. x1 Q6 i+ f) E9 [) \1 V" b* ?' E

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把
$ m) N" x. E# ~* A; H) V6 B5 k: ^
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
, J: ^5 h* Q7 h1 ]0 i. N你不是魔王把

  O+ I1 D9 u" v# }" o" a當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
' u( m- [4 y. W6 P9 G2 F/ o& H0 p# {
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。; T% d, G, j0 K' I
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵# B1 |' U/ U8 z& {4 L; S. r5 V
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題4 S* ?' E6 p& ?* C# u
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-7-19 06:39

By DZ X3.5

小黑屋

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