我覺得首先要選擇一個(gè)合適的環(huán)境,對(duì)于大多數(shù)php站點(diǎn)來說,運(yùn)行在lnmp(linux+nginx+mysql+php)環(huán)境下是個(gè)理想的選擇.
首先一點(diǎn)linux對(duì)比win的優(yōu)勢我就不說了。
其次nginx的優(yōu)勢總結(jié)起來就是負(fù)載均衡,高并發(fā)性能優(yōu)異。
這里php采用fastcgi的方式接入nginx,php5.3 自帶的php-fpm已經(jīng)很好了,相比于apache的php模塊方式,這里由php自己直接處理php請(qǐng)求是比較好的,并且可調(diào)控進(jìn)程數(shù)量以優(yōu)化并發(fā)性能。
上面說的是基本環(huán)境,我有一臺(tái)q6600的老四核,4G內(nèi)存的linux服務(wù)器,上面跑了幾十個(gè)站點(diǎn),最高跑到90M帶寬,成功hold住!
下面說說程序方面的優(yōu)化。
我們知道,靜態(tài)頁面的速度比動(dòng)態(tài)頁面要快,尤其是在nginx下,靜態(tài)頁面直接由nginx提供服務(wù),性能尤其高。而動(dòng)態(tài)頁面,雖然fastcgi也很好,但是相比于nginx直接處理靜態(tài)頁面,還是有點(diǎn)差距的。
這里介紹兩個(gè)好東西,一個(gè)是nginx自身的緩存功能proxy_cache和fastcgi_cache,然后還有一個(gè)nginx模塊ngx_cache_purge用于清理指定url的緩存。
這里單臺(tái)服務(wù)器我們主要使用的是fastcgi_cache,可以指定的url下,將php腳本的執(zhí)行結(jié)果緩存到磁盤和內(nèi)存上,并可以指定過期時(shí)間,第二次訪問的時(shí)候,由nginx直接取緩存文件,就相當(dāng)于靜態(tài)頁面了,效率當(dāng)然很高。
說完nginx再說說php,nginx用于緩存整個(gè)頁面,而有的頁面我們不需要緩存全部,只需要緩存一些短數(shù)據(jù),比如一些數(shù)組,訪問記錄之類的臨時(shí)新內(nèi)容。傳統(tǒng)的php是直接采用文件式緩存,就像dedecms里data/cache目錄,里面存放的就是很多緩存文件,主要是用來避免頻繁的數(shù)據(jù)庫查詢。一般情況下,文件緩存也夠了,但是要追求極致,尤其是高并發(fā)下,不如試試memcached吧,很好的一個(gè)東西,作用是將一些字符串以鍵值對(duì)的形式存放到服務(wù)器內(nèi)存中,指定過期時(shí)間,下次用的時(shí)候直接從內(nèi)存中取,不消耗磁盤I/O,速度也不是一個(gè)級(jí)別的,原理和文件緩存一樣。
暫時(shí)能想到的就是這么多,其實(shí)主旨就是一個(gè):緩存。只是緩存的方式不同罷了。那么如何選擇合適的緩存方式,就是我們開發(fā)人員需要考慮的事情了。