wordpress有幾萬篇文章的網站,如何從慢如蝸牛變成兔子般響應?
建立了一個博客,發表了3.8萬篇文章。
隨著數據條數的增多,尤其是搜索的時候,發現搜索時靈時不靈,很久都沒有反應。
后面在wordpress中footer.php頁面下加入這一句,可以顯示mysql加載的速度和耗時。
echo get_num_queries();?>次加載共計耗時 timer_stop(1);?>秒
搜索關鍵詞之后,發現用時居然快一分鐘了,慢成蝸牛了,實在不能忍了。
18次加載共計耗時52.783秒
通過下面的方法,讓網站變成兔子一樣迅速。
架設個人博客網站、企業門戶都可以使用ECS。如果其網站如個人博客主要面向國內用戶訪問,為加快速度還是建議選用國內的服務器商。
[阿里云域名] ( https://wanwang.aliyun.com/domain/com/?userCode=yos4xyvp)連接,
[阿里云服務器ECS] ( https://www.aliyun.com/minisite/goods?userCode=yos4xyvp) 鏈接
為什么選擇阿里云
- 以前域名注冊一般選老牌域名服務商,其中萬網已經被阿里收購到旗下了。
- 提供域名備案服務。備案業務還是很貼心的。提交完備案信息之后,第二天阿里云小姐姐會幫你免費形式審查一下,還會主動打電話過來幫助校正。如果是自己動手提交備案信息給ICP備案機構,萬一因為低級錯誤被駁回就浪費了十天左右時間。
- 域名ICP備案需要服務器,阿里云也提供服務器購買,一條龍服務嘛。服務器在阿里云畢竟服務器才是支出大頭,域名什么的都是小意思了。而且購買完服務器之后,還會有客服主動打電話過來詢問使用情況,需不需要技術支持,還是挺不錯的。
- 阿里云服務器購買新用戶有優惠,最基礎的話一年下來不超過100元。如果是本科生的話免費使用的。
- 備案完成之前,服務器不算租賃時間。比如說3月1日我購買了一年的服務器,域名提交備案。18日域名備案審核通過。服務器租賃時間重新按18日算起,即可以用到第二年3月18日。相當于免費多用幾天。占了一點小便宜。
限定搜索標題
搜索發現關鍵詞發現返回一兩萬條結果。
才了解到搜索不僅僅是搜索標題,還包括正文內容。
其實我在這里并不需要搜索正文內容,修改PHP代碼,限定只搜索標題,將下面的代碼添加到主題的?functions.php?文件即可
/**
* 讓 WordPress 只搜索文章的標題
* https://www.wpdaxue.com/search-by-title-only.html
*/
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
對MySQL的wp_posts表中post_title增加索引
這樣加快對標題搜索。
安裝Memcached插件
在bt面板里勾選這個插件,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
清理WordPress中MySQL數據庫垃圾數據
數據庫的垃圾數據主要存在wp_posts、?wp_postmeta、?wp_commetns、?wp_commentmeta?和?wp_options
具體可以搜索”介紹使用WordPress時10個常用的MySQL查詢“等內容。
關于Wordpress中數據表關系如下
|
數據表 |
存儲的數據 |
關聯到 |
|
wp_posts |
文章、頁面、附件、版本、導航菜單項目 |
wp_postmeta (通過post_id關聯) |
|
wp_postmeta |
每個文章的元數據 |
wp_posts (通過 post_id關聯) |
|
wp_term_relationships |
文章和自定義分類法之間的關系 |
wp_posts (通過 post_id 關聯) wp_term_taxonomy (通過term_taxonomy_id 關聯) |
|
wp_term_taxonomy |
自定義分類法(包括默認的分類目錄和標簽) |
wp_term_relationships(通過 term_taxonomy_id關聯) |
|
wp_terms |
關聯到分類法中的分類目錄,標簽和自定義分類項目 |
wp_term_taxonomy (通過term_id 關聯) |
wp_posts
因為wp_posts會保留文章修訂版本,即發布一篇文章,在數據庫里是有兩條的數據的。
刪除文章修訂版本
DELETE FROM wp_posts WHERE post_type = 'revision';
wp 媒體管理器上傳圖片的時候同時會生成attachment?文章格式,如果你不需要根據這個檢索圖片的話也可以刪掉。
DELETE FROM wp_posts WHERE post_type = 'attachment';
wp_postmeta
這里是重災區,可以執行以下命令
DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';
如果你不需要管理你的多媒體文件可以使用下面這兩句
DELETE FROM wp_postmeta WHERE meta_key = '_wp_attached_file';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata';
綜合到一起可直接執行下面兩句
DELETE FROM wp_postmeta WHERE meta_key in ('_edit_lock', '_edit_last', '_wp_old_slug', '_revision-control', '{{unknown}}', '_wp_attached_file', '_wp_attachment_metadata');
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
wp_comments
刪除所有垃圾評論
DELETE FROM wp_comments WHERE comment_type = 'trash';
刪除所有待審評論
DELETE FROM wp_comments WHERE comment_approved = '0';
wp_commentmeta
一般來說直接刪掉這個表就可以了,如果你使用了commentmeta存儲信息請謹慎執行此句
TRUNCATE TABLE `wp_commentmeta`;
wp_options
尤其是使用網易云音樂,都會在wp_options表中產生大量垃圾數據。
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%';
這樣會刪除所有臨時數據,包括未過期的,謹慎使用。
通過以上設置,現在幾萬條的搜索,不到1秒的響應,效率極大的提高。
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若本站內容侵犯了原著者的合法權益,可聯系本站刪除。
推薦
-
2023-05-19
