过期域名预定抢注

 找回密碼
 免费注册

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

  [複製鏈接]
發表於 2013-7-15 10:55:16 | 顯示全部樓層 |閱讀模式
本帖最後由 hknovo 於 2013-7-15 10:57 編輯 $ \  E& r- W, X% W
8 {1 x. s2 H5 p5 ?6 Z# ?4 R" A; g

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

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

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

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

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

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


  1. : I9 d  k$ y: p& H1 s' M4 C. \
  2. <?php, N" [$ G0 \7 {8 z, o5 K# d
  3. $rand_posts = get_posts("cat=" . the_category_ID(0) . "&orderby=rand&showposts=10");
    9 Q" [) ?" ^: O5 c- f3 ^* R
  4. foreach( $rand_posts as $post ) :
    6 N, g" z6 T3 Z' s7 s, b
  5. ?>" O' m- i4 a: s7 e4 o! O* ~4 G
  6. <li><h3><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3></li>
    4 y7 s0 X. H" q4 _* q
  7. <?php endforeach; ?>
    1 W& r8 @$ _+ \6 |* d! K

  8. % L' j8 d* b$ _3 _; L- y$ ^$ |
複製代碼

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

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

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

  1. <font face="Tahoma, Verdana,">[/font][/p][p=21, null, left][font=Tahoma, Verdana,] <?php: V" }) w4 U* E! {$ S9 ~
  2. $t1=microtime(true);- {8 L/ N% E, G5 M
  3. $rd=mt_rand(0,1000);
    * N, Z* L7 n2 d; m. O: H* U$ y" x
  4. $myposts=get_posts('numberposts=100&offset='.$rd.'&category='.the_category_ID(0));% ^" z5 H# ^* l
  5. foreach($myposts as $post) :
    2 a! Y5 {" `, \" N3 Z
  6. echo microtime(true)-$t1."
    5 w) k" ]; j9 l, W. o9 R1 H
  7. ";3 T# B$ D; W  z5 x! O7 C) m
  8. setup_postdata($post);2 x1 s# p- G- |3 c3 o. C% F4 M" n
  9. ?>, C7 v3 v/ n' _5 w
  10.     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>* N' ]5 y$ m4 X. o
  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
    $ T( p5 w$ Q3 c) ~/ U$ a# x
  2. $t1=microtime(true);
    8 o/ h3 \( T' m' E) K. y
  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");! R1 c( H5 G8 e: W5 E7 U/ b4 |
  4. echo microtime(true)-$t1."
    & ?. R$ z' }: b0 I
  5. ";- D' y+ ?1 P+ h" A% Y; h: n6 j
  6. foreach($rand_posts as $post ){?>' _. \! K7 g% |$ R2 H5 K
  7. <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    " S0 j  E# Y) J8 G: e7 w- L& L6 ?
  8. </li>2 o/ L  E- C9 {
  9. <?php } ?>[/font][/p][p=21, null, left][font=Tahoma, Verdana,]</font>
複製代碼

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

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

<?php
% A+ `) q5 t# \7 A# H7 r0 ^$t1=microtime(true);

$wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));& A' c6 y* e! p) S3 x7 A! T

5 s1 Q3 T& m1 k$randid = mt_rand(0,$wpcount-12);8 T$ p3 e4 U* h% c4 m$ ^  R! i
$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 }6 d4 R, ^( {8 h
foreach($myposts as $post){: j$ j& |- t9 F3 L) X8 R3 L
?>

<li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
: U: a( s$ S2 m: ^7 a- I: i <?php+ o( T1 I1 @7 p) V2 a$ B. ^0 Y
}?>


4 G$ u5 Y% C( U7 y+ @( L轉自 混世魔王博客! g. T. w- d7 m  B: P, S

0 ^7 ~8 B) p+ U7 @4 P

評分

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

查看全部評分

發表於 2013-7-15 11:47:23 | 顯示全部樓層
哈哈 魔王的文章都被轉載到這裡了
: W$ ]( y4 U" \
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 11:50:03 | 顯示全部樓層
如何檢測自己的空間訪問速度是否滿足需要,有人知道嗎?6 H' m2 `1 F6 H; Q" N, `2 I1 x
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 14:40:15 | 顯示全部樓層
本帖最後由 hknovo 於 2013-7-15 14:43 編輯 $ u( _& n! x; q, ~$ _
$ `' Z$ b9 U  y" M

網站訪問速度,也是影響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$ k% ?) ]6 C' _! d& K9 C
* y  I8 O( I( L
[color=rgb(51, 102, 153) !important]複製代碼

/ J& ^7 ~- g& \: U6 Z: n3 X& n

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

6 ]$ R; B) J, F; J4 ^1 s
a.jpg
4 y$ l2 @8 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>
    " }% w% g/ I! C2 I7 e& w

! _' q: q" g6 D6 i% ^2 S
[color=rgb(51, 102, 153) !important]複製代碼
, r; a# k0 t# W: E

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

b.jpg * T- c- U! Y5 q& W; T' t" u

. X! a1 f8 _! D6 _4 P

繼續,優化。

  • <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>
    0 U8 H+ W: u; L5 V  m  x7 s

  x) ]" U7 D! }, ~. ^3 ]+ L
- G/ }! v3 x1 Y
複製代碼 c.jpg
  U8 f# @" ?3 ~: ^3 r1 [

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

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

  1. <?php! y7 G% w2 b, v2 W# v
  2. $t1=microtime(true);
    3 u$ l! _. `- ?4 b3 \. _. Z) W
  3. $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status  = 'publish'"));
    ) B& Z* z- `) M) [  P2 p' I
  4. 5 p/ _& m& M( `4 A
  5. $randid = mt_rand(0,$wpcount-12);: p6 l; a) `' |' V
  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");
    ( y+ D) N% F' {$ [" ~+ A% W: z
  7. echo microtime(true)-$t1."! o/ ]# p9 s) n7 C6 {
  8. ";3 J4 j0 Y3 ~1 V' W6 \4 h
  9. foreach($myposts as $post){
    6 Z( H& R6 G7 }  T3 T& A
  10. ?>
    + [: {6 [6 }; p/ _6 K2 m$ q8 ~
  11. <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
    1 y. [( X8 \! @) d9 e0 _
  12. <?php6 D6 |/ a" c5 A; L& p
  13. }?>
複製代碼

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


$ L, P) E, m; @* a+ \4 d( J8 d$ k3 ?* x/ f

評分

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

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 20:23:45 | 顯示全部樓層
你不是魔王把
" S* G2 s6 O' O" T5 l# ?
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-7-15 21:11:14 | 顯示全部樓層
月光飛燕 發表於 2013-7-15 20:23
" n6 _8 S, A7 r1 ?4 _4 s" A2 i- j你不是魔王把
% R* I8 k; n& e+ y
當然不是,嘿嘿 。只是覺得好東西應該讓大家都知道,月光也認識混世魔王?
4 ^# P% G7 o6 A6 ?8 l8 D! R3 \) y2 e1 p& U. m& r& v" W$ x' ?$ U
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-15 22:57:23 | 顯示全部樓層
多謝分享。。。。。。。。。。。
3 h- `& d4 l, ]1 V+ o7 |
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 00:23:36 來自手機 | 顯示全部樓層
幾萬篇文章啊 我沒有想過啊 反正我是做不來的了 呵呵
5 }! r  k2 p" }
回復 给力 爆菊

使用道具 舉報

發表於 2013-7-16 11:10:37 | 顯示全部樓層
數據庫大了確實是個問題
) z9 J- L8 r: o# S+ W" N6 X
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2025-7-11 09:21

By DZ X3.5

小黑屋

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