1、靜態(tài)文件優(yōu)化
創(chuàng)新互聯(lián)公司從2013年成立,先為徽縣等服務(wù)建站,徽縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為徽縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
網(wǎng)站的靜態(tài)文件一般有兩種:第一種是網(wǎng)站的 CSS,Javascript 和一些主題的常用背景圖片和按鈕文件,這些圖片如果網(wǎng)站不進(jìn)行改版或者其他改動,基本上是不會修改的,第二種是每天更新的網(wǎng)站內(nèi)容中上傳的圖片或者附件,這些圖片文件也是基本不會改動的。
解決好靜態(tài)文件存儲和加速,網(wǎng)站性能就首先能得到基本的保證了,WordPress 構(gòu)建的網(wǎng)站和博客也是一樣的。對于這些靜態(tài)文件來說,最好的解決方案永遠(yuǎn)是使用 CDN 網(wǎng)絡(luò)進(jìn)行加速,這樣服務(wù)器的壓力將大大降低,因?yàn)樵L問頁面只有當(dāng)前頁面是在自己服務(wù)器上,其他所有圖片 JS CSS 都是從 CDN獲取的。
2
服務(wù)器優(yōu)化
優(yōu)化好靜態(tài)文件之后,就要開始對網(wǎng)站的動態(tài)內(nèi)容進(jìn)行優(yōu)化,優(yōu)化動態(tài)內(nèi)容,首先要有一個(gè)穩(wěn)定網(wǎng)絡(luò)環(huán)境,穩(wěn)定的主機(jī)供應(yīng)商和服務(wù)器性能的優(yōu)化。
選擇一個(gè)靠譜的主機(jī)托管商,在國內(nèi)這個(gè)很多時(shí)候讓你抓狂,但是只要努力還是可以的。個(gè)人選擇 BGP 或者多線機(jī)房,讓全國用戶訪問都能有不錯(cuò)的速度,然后盡量選擇獨(dú)立的服務(wù)器,再不濟(jì),也得 VPS, :-) 因?yàn)槟銢]有服務(wù)器的 Root 權(quán)限很多東西是無法進(jìn)行的(個(gè)人博客可以考慮選擇我愛水煮魚目前使用的 Media Temple 這類的 VPS 主機(jī)),當(dāng)然你也可以找我合租,速度肯定非常強(qiáng)悍。
WordPress 緩存機(jī)制和如何緩存
要徹底明白和搞懂 WordPress 性能優(yōu)化,首先要理解 WordPress 緩存機(jī)制,WordPress 默認(rèn)是一種叫做 WordPress Object Cache 的對象緩存機(jī)制,它是把需要緩存的內(nèi)容按照 Key-Value 這樣的模式進(jìn)行緩存(和 No-SQL 的 key-value 的有點(diǎn)類似),當(dāng)然它還支持按照 Group 來劃分和避免緩存的內(nèi)容沖突。
所以最基礎(chǔ)的 WordPress 緩存插件就是,把 WordPress 產(chǎn)生的 Key-Value 存起來,如果是使用 Memcached,就是存到內(nèi)存,如果使用 Flie 就是存到硬盤中,當(dāng)然高級的 WordPress 插件還能做更多,比如 WP Super Cache把整個(gè)頁面緩存到硬盤中,下次直接訪問靜態(tài)的 HTML 文件,讓服務(wù)器直接繞過 PHP,節(jié)約 CPU 時(shí)間。 Batcache 會把整個(gè)頁面當(dāng)做一個(gè)對象存到內(nèi)存里面。
App每日推送 由于注冊用戶操作比較頻繁,不適合 WP Super Cache 這樣的靜態(tài)緩存,對硬盤讀寫太多,討論區(qū)又無法緩存,我們使用 Memcached 和 Batcache 搭配的內(nèi)存緩存模式:
對于已登陸的用戶,Memcached 會把 WordPress 的對象存到內(nèi)存里面,服務(wù)器的內(nèi)存足夠大,讀取和存儲速度也夠快,并且內(nèi)存緩存命中率也大于 94%。另外我們 WordPress 程序經(jīng)過優(yōu)化,每個(gè)頁面的查詢一般在 2 條左右,所以整個(gè)網(wǎng)站效率很高。
WordPress 程序優(yōu)化
WordPress 程序優(yōu)化是基于 WordPress Object Cache 的機(jī)制對 WordPress 插件和主題進(jìn)行優(yōu)化,主要經(jīng)驗(yàn)有以下幾點(diǎn):
只使用必須的 WordPress 插件,安裝太多的 WordPress 插件很容易引起性能問題。從正規(guī)站點(diǎn)下載 WordPress 主題,這樣下載的主題才能保證質(zhì)量和安全。WordPress 主題和插件盡量使用模板函數(shù),因?yàn)?WordPress 模板函數(shù)如果可能都已經(jīng)做好了 WordPress Object Cache。比如 get_the_terms 和 wp_get_object_terms 這兩個(gè)函數(shù),功能基本一樣,但是 get_the_terms 直接從對象緩存中取數(shù)據(jù),無查詢,而 wp_get_object_terms 每次都從數(shù)據(jù)庫中取數(shù)據(jù)。WordPress 插件和主題如果一定要直接查詢數(shù)據(jù)庫,請做好 Object Cache,將查詢的結(jié)果使用 wp_cache_set 存到 Object Cache 中,下次直接使用 wp_cache_get 獲取。
5
WordPress 性能優(yōu)化總結(jié)
選擇好的服務(wù)器和托管商,對 WordPress 程序進(jìn)行優(yōu)化,并且做好緩存,WordPress 效率其實(shí)很高的,加上 WordPress 本身的靈活性和功能強(qiáng)大,WordPress 作為各種建站絕對是非常不錯(cuò)的選擇,所以我一直使用 WordPress 建站。
6
WPJam Debug 插件
最后補(bǔ)充一個(gè) WordPress 性能檢測的插件:WPJAM Debug,可以在頁腳顯示當(dāng)前頁面有多少條 SQL 查詢,頁面生成花了多少時(shí)間,并且把 SQL 按照執(zhí)行順序和按照耗時(shí)兩種方式列出,通過這樣的方式幫你分析 WordPress 哪條 SQL 查詢有問題或者比較慢,然后著手改進(jìn)它。
本文只限Apache配置主機(jī)的使用方法,增加WordPress文件上傳大小限制:通過配置php.ini的upload_max_filesize 和 post_max_size,重啟Apache;通過修改.htaccess文件。
最近在用WordPress做一個(gè)視頻B2B網(wǎng)站,所需要的上傳的文件已經(jīng)遠(yuǎn)遠(yuǎn)超過了32MB的限制(32MB的視頻能干什么?。?。
網(wǎng)上分享的方法
一如既往的百度,基本大同小異,最后參考了WordPress啦!的增加文件上傳大小限制:
一般來說你使用的主機(jī)會限制你上傳文件的大小,在WordPress的媒體文件上傳可以看到,大多數(shù)都是2MB(我的是32MB)。如果是圖片的話可能會還夠用,但是如果是音頻和視頻文件就不一定夠用了。
方法一:
在functions.php中添加如下代碼,這樣上傳限制就是64M
復(fù)制代碼
代碼如下:
@ini_set( 'upload_max_size' , '64M' );
@ini_set( 'post_max_size', '64M');
@ini_set( 'max_execution_time', '300' );
方法二:
新建一個(gè)php.ini文件,在你的主機(jī)空間的根目錄新建一個(gè)php.ini文件,里面使用如下代碼。
復(fù)制代碼
代碼如下:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
方法三:
使用.htaccess文件,在這個(gè)文件中添加如下代碼。
復(fù)制代碼
代碼如下:
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300
子任采用方法
我現(xiàn)在是使用的WordPress3.4+版本,上傳文件大小已經(jīng)是主機(jī)配置決定的了,主機(jī)本身配置upload_max_filesize 和 post_max_size 都是32M,想要得到效果:
WordPress文件上傳大小300MB
上述方法一:無效!
上述方法二:有效,重啟Apache
上述方法三:有效,無需重啟Apache
總結(jié):上傳大小主要用服務(wù)器配置決定的,例如后兩種方法;而第一種方法不過在服務(wù)器配置的基礎(chǔ)上來進(jìn)一步用程序來限制罷了。
子任出于綜合考慮,減少服務(wù)器不必要的負(fù)擔(dān),最后采取了第二種方法:
復(fù)制代碼
代碼如下:
upload_max_filesize = 300M
post_max_size = 300M
max_execution_time = 300
在做優(yōu)化的時(shí)候,碰到這么一個(gè)問題,需要在一篇文章中加入一個(gè)大小為19.4MB的PDF文件,而wordpress限定的文件大小只有8MB,那么如何在WP博客上上傳文件,而且文件大小不受限制呢?
方法很簡單,只需要3步就可以增加wordpress文件上傳大小的設(shè)置:
首先,我們打開FTP進(jìn)入wordpress博客站點(diǎn)的根目錄,找到一個(gè)名為php.ini文件,下載到我們的電腦桌面上,用DreamWeaver打開文件后加入下面2行代碼,
post_max_size = 20M
upload_max_filesize = 20M
然后我們把這個(gè)文件更名為php5.ini。
請注意,上面我控制上傳文件大小和文章大小為20M,你可以根據(jù)你自己的需要設(shè)置上限。
下一步我們打開文件wp-config.php文件,看到這個(gè)是不是很熟悉?這個(gè)文件就在你的wordpress目錄下,我們以前安裝wordpress就是編輯的這個(gè)配置文件,現(xiàn)在我們需要再給它加上一段代碼來完成文件上傳大小的設(shè)置,
define('WP_MEMORY_LIMIT', '64M');
注意請?jiān)诒4媲鞍丫幋a更改為博客默認(rèn)的編碼,例如我的編碼是UTF-8,如果不修改的話就會出現(xiàn)亂碼甚至打不開的問題。
最后一步,保存上面2個(gè)文件,一個(gè)是php5.ini,另一個(gè)是wp-config.php,然后在FTP上刪除php.ini,上傳這2個(gè)文件,大功告成!刷新一下你的wordpress后臺,你會發(fā)現(xiàn)上傳文件大小已經(jīng)變更為你設(shè)置的大小。
真是糾結(jié),剛在登陸我的wordpress后臺的時(shí)候發(fā)現(xiàn)網(wǎng)站無法打開,只能打開登陸頁面,其他頁面一直是無法響應(yīng)……
馬上打開網(wǎng)站日志,查看錯(cuò)誤文件發(fā)現(xiàn)錯(cuò)誤時(shí):out of memory (allocated 9699328) (tried to allocate 393216 bytes)
意思很簡單:內(nèi)存溢出。也就是內(nèi)存不夠的意思,二話不說先恢復(fù)網(wǎng)站再說,直接重啟apache,重啟后正?!?/p>
但是問題出現(xiàn)了不能就這樣忽略掉呀,如果不處理肯定下次還會出現(xiàn)這種問題,既然提示內(nèi)存不足那么就我直接調(diào)大wordpress運(yùn)行的內(nèi)存,
這是最簡單的方式了。再想一想wordpress哪設(shè)置了內(nèi)存大小呀,有點(diǎn)影響wp-config.PHP里面有,打開找一找,怪了,沒有……
經(jīng)過漫長的尋找終于在wp-includes/defaule-constants.php 中找到,在wp_initial_constants方法中,方法是這樣寫的,[無線通信模塊]主要的幾句是:
1 if ( !defined('WP_MEMORY_LIMIT') ) {
2 if( is_multisite() ) {
3 define('WP_MEMORY_LIMIT', '64M');
4 } else {
5 define('WP_MEMORY_LIMIT', '32M');
6 }
7 }
8
9 if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
10 define( 'WP_MAX_MEMORY_LIMIT', '256M' );
11 }
第一行:如果沒有定義WP_MEMORY_LIMIT
第二行:如果網(wǎng)站只有一個(gè)(可以在一個(gè)wordpress建立多個(gè)站)
第三行 如果有多個(gè)網(wǎng)站就設(shè)置wordpress的內(nèi)存為64M
第四行:如果沒有多個(gè)網(wǎng)站就設(shè)置他的內(nèi)存為32M(哈哈,找到了,wordpress默認(rèn)的大小為32M)
第9行:如果設(shè)有設(shè)置WP_MAX_MEMORY_LIMIT最大內(nèi)存的話
第10行:如果沒有設(shè)置最大內(nèi)存的話,就定義最大內(nèi)存為256M……
綜上所述:wordpress設(shè)置默認(rèn)的內(nèi)存為32M,如果內(nèi)存不夠用,最大不會超過256M……
256M實(shí)際上已經(jīng)夠大了,不過感覺最小32M太小了,改,這個(gè)一定得改,把他改成100M,默認(rèn)100M
所以在wp-config.php中增加一行配置:define("WP_MEMORY_LIMIT", "100M");
把默認(rèn)的32M改成了100M……這樣總行了吧,改后繼續(xù)觀察……
建博客半年第一次發(fā)生這種事情……
更多 wordpress內(nèi)容請看 wordpress 專題
在想想,這樣改的確是改了wordpress的,但是php也有限制呀,php限制了的話,wordpress設(shè)置成1G都是沒用的,打開php.ini文件,查看一下默認(rèn)的php的內(nèi)存多大,找到memory_limit默認(rèn)的是128M,
memory_limit = 128M
哦,原來如此,php設(shè)置的最大內(nèi)存是128M,所以上面的wordpress配置中的256M是沒有作用的,php這里限制在128M以內(nèi)。
經(jīng)過這幾個(gè)分析統(tǒng)一起來,最終的wordpress的內(nèi)存設(shè)置是:最小100M,最大128M,內(nèi)存大小在2者之間變動。
在觀察一段時(shí)間,如果沒有出現(xiàn)錯(cuò)誤的話就這樣,再發(fā)生內(nèi)存不足的問題,果斷把php中的128M改成256M……
友情提示:我敢保證我的模板,我在模板中寫的代碼沒有任何性能問題,作為一個(gè)超級軟件設(shè)計(jì)師這點(diǎn)自信還是有的……
如果你的wordpress老是經(jīng)常內(nèi)存不足,就要在模板,在自己寫的代碼上找原因,因?yàn)樾阅艿拖碌拇a用超級計(jì)算機(jī)都是沒用的,給你一臺銀河計(jì)算機(jī)還是照樣會內(nèi)存溢出……