过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯
6 q( I0 s* g6 H; ]* t  [2 d5 z
6 |6 E7 V% L, I7 P* F

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

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

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

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

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

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

  1.   H1 ~# b; i+ W; w$ q9 E* k9 D; e
  2. <?php
    ; j$ ?/ R9 q" D! k
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");3 E- r1 i3 l5 }- L
  4. foreach( $rand_posts as $post ) :
    # q: J1 X( o: l1 }1 v
  5. ?># x& D, `; `2 `) F7 M  ?
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>: l! z0 W3 c4 s, }' V
  7. <?php endforeach; ?>
    2 U& E/ |' k0 {" b' I# _( j
  8. ( C+ a& a6 ]5 N' C% A. U% B0 N, W
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php
    1 x9 w% y8 Y0 z# b, i. ~! y. c
  2. $t1=microtime(true);
    ) a8 B; O$ \& l  a0 x" o5 E* p4 Q
  3. $rd=mt_rand(0,1000);2 \( K1 }" K5 Z  O3 x
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));$ |1 B% g# i" u+ r$ v
  5. foreach($myposts as $post) :
    ; c' B" O, H  V$ H) v& E
  6. echo microtime(true)-$t1."9 [4 c% J* i3 t+ Z
  7. ";
    . ]/ n* M- l0 A3 c$ a& g  v' B
  8. setup_postdata($post);
    : z$ C/ T% q& s/ a
  9. ?>  x( W4 l& ^2 X) g! A' h2 Z
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>; H$ e4 I6 u& d" X1 Q. \
  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# J. p5 }& u2 V; X0 ]) t
  2. $t1=microtime(true);
    0 p0 I  D( w& b; l6 v6 W; Q3 W# C
  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");
    . h9 u8 l" i* ]+ n( T8 N
  4. echo microtime(true)-$t1."" ~9 v$ H' ^& K; I, s, |& m3 i* ^
  5. ";8 o9 d+ r' [' ^) Q6 r
  6. foreach($rand_posts as $post ){?>
    - ]' b0 a  `  H' T2 D" q" e  L# |
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>% v( n+ c/ w: v% B
  8. </li>" f, K: x1 ?' H! }
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php
6 z% a; _5 `' w2 R0 ~$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));/ g; v  _, {+ q+ m1 Q

: l* T0 x) y/ y. l$randid = mt_rand(0,$wpcount-12);
1 h  S9 l" Z# E0 e$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>";/ }- u, [7 I+ l
foreach($myposts as $post){) O. C! `* [5 B5 f; b- x
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>9 d7 D3 e! V6 R( p% K; b) a
<?php4 P/ R# G+ |  J3 u
}?>

, i1 l! |4 Y% o2 i) }5 L8 K
轉自 混世魔王博客
* i/ B0 K! j$ }& v
4 ?( k9 F# R  G7 F, E

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了" {! j, h9 y) x6 S  l" E
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?9 v/ q* x) a$ q! {4 Q" o6 G0 u
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯 ( k. ^4 M% i4 z+ U4 E: [

! O( q* l( U$ w7 `* L

網站訪問速度,也是影響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; ?>
  • 1 o5 ^- U/ f" J
; c* J6 x3 ^9 W3 o
[color=rgb(51, 102, 153) !important]複製代碼

. s" F. J. A, N# K- s

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

  m8 c/ q1 z, v. S
a.jpg 1 e; @; ?4 [/ L+ A, `. Y

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

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

  • <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>; X0 ]: k9 v' x/ N

, v2 O3 D, ?# X
[color=rgb(51, 102, 153) !important]複製代碼

3 Z  p5 J4 G' j2 v8 X1 K6 g

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

b.jpg
% j4 Z3 y( O$ O5 i! f( ]$ c1 v4 r, v8 o) R

繼續,優化。

  • <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>
    ( z! n; {9 ~; z

  t0 i* v4 ~5 Y* x) M) \9 G

7 K! E; V6 s/ o7 U/ x, W3 @( t) @複製代碼 c.jpg 4 g" c$ c: G3 y% T) @' u& l4 q

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

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

  1. <?php
    ; A# S( M$ G. {$ V+ l1 ^$ f' Y* `
  2. $t1=microtime(true);
    7 @/ G4 ?) ]) L* [
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
    % ~8 Q. [5 m' s- ]% g& M# f

  4. ( [! \4 M4 l( F, ~9 _$ b
  5. $randid = mt_rand(0,$wpcount-12);
    & z* z" \( J( [* W" R2 m% C
  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");
    9 G) E. y4 r7 V0 m# s% _
  7. echo microtime(true)-$t1."$ m$ L4 n$ {, O8 f' \! |0 B, F) ^
  8. ";9 g; N* s5 q4 z+ s$ Y9 P
  9. foreach($myposts as $post){; }! g3 i5 y$ o
  10. ?>2 `" N) Y# F8 y/ F# q. w
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>8 Q: z6 K" P  v- h! ~: l8 u
  12. <?php
    0 p, Z. T/ B' A, e) X: _! G' B
  13. }?>
複製代碼

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


+ h) Y# m6 u$ X( r- P# Z" _# |' Z. c, q% @

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把 " n9 [& d! }# r* N
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23 - @. Y* Y8 ?5 T0 n1 P- _) u! g
你不是魔王把
  P2 f: t. B% e
當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
  _% ^2 l- W' l2 z
  k$ J& x; c& {1 [& J; J3 ?* I2 k* l
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。, S: V7 V# z/ i
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵
) P' F: _" Q$ j! B
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題- P* b# i" w8 Q& W+ A
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-7-15 04:40

By DZ X3.5

小黑屋

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