本帖最後由 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
$ 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 秒
# 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複製代碼
' l4 h( z- X* S7 Q 可以看到,上萬的文章,隨機輸出200篇,查詢 0.02 秒。 執行效率得到大幅度提升。 - <?php
* H4 B& H: u* C4 H- x- N - $t1=microtime(true);. _! ~: F, A. L9 x3 L& G) G
- $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. ]
- ' z8 Q" i9 F+ t8 Q j& h
- $randid = mt_rand(0,$wpcount-12);8 F/ H+ t: n0 x5 u
- $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 - echo microtime(true)-$t1."
! ~0 k7 `; p# a" ` - ";
7 v( X; S% i. b9 s$ p; L - foreach($myposts as $post){+ Y! `# T4 d9 j; p5 t
- ?>. O. H2 @# E2 o2 q: r: Z
- <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 - <?php/ Q3 Z1 j/ q. C
- }?>
複製代碼麻煩上面扣分的,把我的豬毛還來,賺兩幣容易嗎? 不加就算了,還給我減了 " E1 f x0 i6 o2 @2 h' I
4 A) `, S) o% L0 I7 c- X7 s
|