本帖最後由 hknovo 於 2013-7-15 14:43 編輯 * Q& S, x+ B% {: h; O
* f% b. \4 _* c9 Y( P( l" w網站訪問速度,也是影響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; ?>
; C, t% ]$ n- G/ {
0 H( j2 A7 \4 B. b& a5 `[color=rgb(51, 102, 153) !important]複製代碼) M; X; C. o- X" k4 N' k
在幾萬片文章下,服務器直接 time out
$ ^$ ?+ p: o4 W
! o7 w+ S; Y" z3 ^3 W6 R$ _
因為之前的隨機是在幾萬篇文章中隨機的, 我們加入一個隨機值,看看下面的代碼。 - <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>
# x8 N# k! E( |1 |* L$ n( w3 A( [* ^/ {7 Y0 k; B' b
[color=rgb(51, 102, 153) !important]複製代碼) |/ @* w" k( T! B, H- j
網站能顯示了。但是 MYSQL 的數據庫查詢值在 8 秒
5 t9 ~$ I& b0 Y' l# H6 t3 }+ ?0 ^
0 [& w. y: ~ Q4 v6 u
繼續,優化。 - <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>
: l2 y0 v; E; Y' R8 T
+ {2 l! u+ I: T# |) g! l; \% q/ S1 s
複製代碼
4 b8 J w: L% V; p7 S9 Y
可以看到,上萬的文章,隨機輸出200篇,查詢 0.02 秒。 執行效率得到大幅度提升。 - <?php8 p6 S, R, J2 ^( p9 U
- $t1=microtime(true);+ g% V4 s" \5 {0 Y+ v" J6 K7 D/ v( a
- $wpcount = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'"));9 ?3 i* n/ ^6 Z' T
- 7 f( Q( q- l- ?- Y# }# J+ \9 g8 _
- $randid = mt_rand(0,$wpcount-12);
2 u6 w( N7 H* l* k - $myposts = $wpdb->get_results("SELECT id,post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status ='publish' and id>$randid limit 12");
( G1 Y& d3 A2 r - echo microtime(true)-$t1."8 v0 [5 [8 ]6 G% ~
- ";
, l+ b, @ `* F - foreach($myposts as $post){8 x' \! x5 g* P0 f$ b0 k
- ?>& f4 B1 U3 f S, X7 K6 p
- <li><a href="<?php echo get_permalink($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a></li>
. W$ X j4 O" }3 @9 G' L - <?php
# _5 N" M d: ]3 C% s* Q0 R# ]1 L - }?>
複製代碼麻煩上面扣分的,把我的豬毛還來,賺兩幣容易嗎? 不加就算了,還給我減了 # y% `! C- i# T. O( v, r5 S2 |
, G+ Y, F$ |5 M# Z) T$ x |