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