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