前端優化
壓縮圖片:圖片的下載在網頁打開的過程中,占用很多時間,而如果對這些圖片進行壓縮或者其他技巧(例如 lazy load)就可以減少這方面的時間。實踐證明,對 jpg 圖片進行 80% 的壓縮,既保證了肉眼看不出質量問題又可以減少一些尺寸,對 png 格式的圖片,可以使用TinyPNG 來壓縮。
合并文件:這里的文件主要是指 CSS、JavaScript 文件,頁面中每多一個 CSS、JavaScript 文件,瀏覽器就會多一個 HTTP 請求,就會多一個等待時間。理想狀態下,最多只有一個 CSS、JavaScript 文件,并且進行壓縮使其文件盡可能小,這方面建議使用 WP Minify 插件。如果有能力的,還可以合并圖標,把一些小圖片合并起來,做成 CSS Sprite。
使用 CDN:假如你的服務器在北京,北京本地訪問起來就會超快,但是廣東地區的訪問者可能會由于距離和線路問題感覺很慢。成熟的 CDN 服務商在全國各地都會有服務器,如果你把靜態文件放在上面,廣東地區訪問你的網站,會從廣東附近的服務器上下載文件,而且 CDN 的服務器和寬帶為下載做了優化,速度一般會超過你的服務器,這樣就可以大大的提速了,目前一般建議使用七牛云存儲來加速靜態文件。
安裝緩存插件
緩存是提升速度非常重要的東西。當你訪問一個網站,進行過緩存優化的,會將一些圖片和 CSS、JS 文件緩存到你的電腦中。當你下一次訪問的時候,瀏覽器發現緩存中的這些文件沒有過期,就立刻從緩存中調用出來,就不再從你服務器上下載了。這樣,就只需要下載 幾KB 你寫的文字就Ok了,當然打開速度就飛快了。
WordPress 緩存,要看你的服務器的支持程度,如果你的服務器已經安裝了內存緩存這些組件,安裝 Memcached 插件是最優化,如果是虛擬主機,建議安裝了 WP Super Cache。
使用 .htaccess 文件進行緩存
上面是通過安裝插件來進行緩存,如果你不想安裝插件,可以使用下面的方法進行緩存。
將下面代碼按照你的需求修改,放在你 WordPress 站點根目錄下面的 .htaccess 文件中即可:
# 緩存有效時間 1 年 <FilesMatch “\.(ico|pdf|flv)$”> Header set Cache-Control “max-age=29030400, public” </FilesMatch> # 緩存有效時間 1 周 <FilesMatch “\.(jpg|jpeg|png|gif|swf)$”> Header set Cache-Control “max-age=604800, public” </FilesMatch> # 緩存有效時間 2 天 <FilesMatch “\.(xml|txt|css|js)$”> Header set Cache-Control “max-age=172800, proxy-revalidate” </FilesMatch> # 緩存有效時間 1 分鐘 <FilesMatch “\.(html|htm|php)$”> Header set Cache-Control “max-age=60, private, proxy-revalidate” </FilesMatch>
上面代碼做了簡單的注釋,緩存時間主要靠下面的 max-age 參數,是以秒作為單位的,緩存時間上面的參數是要緩存的文件類型。
注意,緩存雖然很好用,但是并非緩存時間越長越好。有些靜態的文件,很長時間都不會改變其內容,就可以設置時間長一些。有些動態的文件,經常修改的,就需要設置時間短一些。曾經有個好友的博客一個月沒有更新了,問了他一下才知道是緩存設置錯了,結果導致打開的時候還是很久之前的內容。
減少數據庫查詢
動態網站肯定要對數據庫進行一些查詢,而每次查詢,都要建立一個數據庫連接,然后等待數據庫返回數據并輸出。這個過程就要浪費時間。WordPress 上面有很多不必要的查詢和用不到的功能,去掉這些可以提速。
可以使用下面這段代碼來查看一下你的 WordPress 建立了多少查詢,你可以把它復制到主題目錄下面的 functions.php 文件中,就可以在底部看到相關信息:
add_action( 'wp_footer', 'wpjam_page_speed' ); function wpjam_page_speed() { date_default_timezone_set( get_option( 'timezone_string' ) ); $content = '[ ' . date( 'Y-m-d H:i:s T' ) . ' ] '; $content .= '頁面生成時間 '; $content .= timer_stop( $display = 0, $precision = 2 ); $content .= ' 查詢 '; $content .= get_num_queries(); $content .= ' 次'; if( ! current_user_can( 'administrator' ) ) $content = “<!– $content –>”; echo $content; }