在處理完程序員自身寫代碼習(xí)慣層面上的問題后,在項(xiàng)目代碼要跑的環(huán)境上也會(huì)對(duì)項(xiàng)目造成很大的影響,當(dāng)然這部分需要強(qiáng)大的資金作為后盾(服務(wù)器中軟、硬件)
1、會(huì)對(duì)項(xiàng)目性能造成影響的外部原因如下:
在硬件上,硬盤的類型影響讀寫文件的速度,當(dāng)然現(xiàn)在SSD硬盤越來越便宜,對(duì)于服務(wù)器上更換SSD硬盤會(huì)使讀寫文件操作有很大提升;其次,內(nèi)存的大小也會(huì)影響程序跑的是否流暢,我們都知道,非關(guān)系型數(shù)據(jù)庫(kù)等緩存系統(tǒng)都會(huì)直接寫內(nèi)存,那么硬件方面的內(nèi)存也就會(huì)影響到緩存技術(shù)的使用
在軟件上,數(shù)據(jù)庫(kù)是基于文件系統(tǒng)的,雖然我們使用的數(shù)據(jù)庫(kù)按分類應(yīng)該屬于軟件,這就需要數(shù)據(jù)庫(kù)服務(wù)商對(duì)我們使用的數(shù)據(jù)庫(kù)進(jìn)行更新,維護(hù)及性能優(yōu)化,數(shù)據(jù)庫(kù)軟件越好,內(nèi)部處理數(shù)據(jù)時(shí)間越短
那么在實(shí)際開發(fā)過程中,我們往往會(huì)把服務(wù)器上的空間都留給PHP來進(jìn)行跑項(xiàng)目,至于硬盤,內(nèi)存,數(shù)據(jù)庫(kù)等全部都遷移到項(xiàng)目代碼以外的服務(wù)器進(jìn)行管理,這就意味著我們PHP在進(jìn)行讀寫文件,操作數(shù)據(jù)庫(kù),操作緩存等都需要進(jìn)行連接外部的服務(wù)器進(jìn)行,這樣,PHP運(yùn)行的空間大了,但是又會(huì)出現(xiàn)一個(gè)問題,網(wǎng)絡(luò)!不僅要考慮到網(wǎng)絡(luò)是否穩(wěn)定,還要考慮帶寬的大小,網(wǎng)絡(luò)的類型
2、PHP的開銷次序:
讀寫內(nèi)存<讀寫數(shù)據(jù)庫(kù)<讀寫磁盤<讀寫網(wǎng)絡(luò)數(shù)據(jù)
其中建立緩存技術(shù)貌似是最佳的選擇了,當(dāng)然,緩存中的數(shù)據(jù)也是需要從基于文件系統(tǒng)的數(shù)據(jù)庫(kù)來儲(chǔ)存的,所以對(duì)于數(shù)據(jù)庫(kù)的選擇也是必不可少的,最后對(duì)于網(wǎng)絡(luò)數(shù)據(jù)的請(qǐng)求,實(shí)際開發(fā)中會(huì)大量用到,雖然開銷大,但是實(shí)際開發(fā)中很多情況下我們無法不適用網(wǎng)絡(luò)接口來進(jìn)行獲取數(shù)據(jù)
對(duì)于讀寫磁盤,只能說盡可能減少對(duì)文件的操作了,上篇文章已經(jīng)講述過了,PHP不太適合密集型業(yè)務(wù)的處理,盡量減少做PHP不適合的工作,沒有那金剛鉆,不攬那瓷器活,做好自己優(yōu)勢(shì)部分足以,我們可以使用擴(kuò)展或者中間件來進(jìn)行解決
3、讀寫網(wǎng)絡(luò)數(shù)據(jù)造成性能低的原因及處理方案
對(duì)于網(wǎng)絡(luò)數(shù)據(jù)的請(qǐng)求,其實(shí)是通過socket來進(jìn)行,網(wǎng)絡(luò)情況的好壞會(huì)影響到請(qǐng)求是否能跑通,數(shù)據(jù)是否能按時(shí)返回,其次,數(shù)據(jù)提供方數(shù)據(jù)是否正確,符合我們的需求,是否還需要進(jìn)行處理都會(huì)加大請(qǐng)求的時(shí)間
那么,針對(duì)這部分問題,我們?cè)谑褂镁W(wǎng)絡(luò)請(qǐng)求的時(shí)候,盡量較少PHP請(qǐng)求的次數(shù),并且在請(qǐng)求過程中一定要設(shè)置請(qǐng)求時(shí)間,通常情況下我們會(huì)設(shè)置連接超時(shí)時(shí)間,讀超時(shí)時(shí)間,寫超時(shí)時(shí)間來減少請(qǐng)求時(shí)間的總體請(qǐng)求時(shí)間的長(zhǎng)短;其次,將網(wǎng)絡(luò)請(qǐng)求并行化處理,通過PHP自帶的curl_multi,或者通過擴(kuò)展來實(shí)現(xiàn)(swoole),將排隊(duì)請(qǐng)求并行處理。但會(huì)出現(xiàn)一個(gè)問題,數(shù)據(jù)返回時(shí)間會(huì)以時(shí)間最長(zhǎng)的支路為主。