最近在研究**系統原始碼,在想怎麼去更好的優化,一般來說,效能優化可先從大的方向開始考慮,從對影響效能比較大的因素來考慮,比如現在使用php5.7,效能可以成倍提高,這些都是客觀因素,類似現在網上的開源**,類似dsmall開源**系統這類,基本都能支援高版本php,最後考慮的應該是php語法細節上。
php部署環境
單台伺服器常用apache+php和nginx+php-fpm方式部署,我們一直使用apache+php方式,據說現在用nginx+php-fpm部署方式效能比apache+php效能好,可考慮一試。另外就是像nginx+swoole等,也是可選項。
集群是在此基礎上,使用nginx/lvs/雲上lbs等反向**作為負載均衡前端。php集群部署在可靠性的基礎上,php集群處理效能比單台伺服器有n倍提高(但作為服務的整體效能並不一定有n倍提公升)。所以簡單地可以認為,通過集群擴充套件伺服器,可以使php服務效能得於提公升。
2.php擴充套件使用
php擴充套件除了使用方便,還是提公升效能的親密夥伴。主要應用有三點:
1). 開啟opcode的快取,來避免重複的編譯。可以使用apc,eaccelerator,xcache等php擴充套件,我們使用xcache。這種只要安裝即可的事。
2). 使用擴充套件提供的方法(或php標準庫的方法),擴充套件實現的效率比php**中的高。但實際上滿足我們專案的擴充套件方法有限,很多基礎方法需要時一步封裝,除非有能力自己開發擴充套件。可考慮使用擴充套件實現的php框架,如phalcon、yaf。
3). 本地快取,也常用擴充套件來支援,比如xcache。本地可使用快取擴充套件,快取一些配置資料、元資料或主資料,不用每次都從資料庫或檔案中讀取。
另,php版本上,現在可以考慮公升到php7……
檔案載入和操作
這是非常重要的優化建議,儘量減少檔案的讀寫,檔案操作包括:檔案讀、判斷檔案是否存在、判斷檔案大小,特別是對於磁碟,減少檔案操作即減少尋道時間,讀取時間。減少乙個檔案操作,比優化n個cpu指令(request/request_once,echo/print,單引還是雙引)、記憶體的效能效果要好得多。
實際應用中,關注以下幾個地方:
1). 把.htaccess的內容寫到apache配置中。平時我們都是通過.htaccess作為檔案放置到php專案的根目錄中,作為url重寫配置等。這就造成每次http請求,都要先讀取.htaccess,多了一次檔案操作。通常.htaccess檔案內容也不需要修改,因此可考慮在apache中配置,並禁用.htaccess檔案。
2). php程式中,減少file_exists等檔案操作函式的使用。在路由框架中,判斷要引用的檔案是否存在,如果不存在則顯示錯誤,存在則執行檔案裡的類方法。
為什麼不直接request $invoke [『path』]呢?其實我們訪問的路徑(檔案),正常的話都是存在的,所以沒必要使用file_exists判斷是否存在。但是訪問到不存在的檔案怎麼呢?用set_error_handler方式全域性處理。但是我只想對當前引用檔案錯誤做特殊處理,把錯誤處理留在自己的框架中,不使用使用者的全域性的錯誤處理呢?
在require前,重新設定乙個錯誤處理方法a,並會返回之前設定的錯誤處理方法;當require檔案不存在時,會執行a,require正常時,重新把使用者的error_handler設定回去。
還有乙個就是日誌的處理,可能每次操作日誌都要判斷一下日誌是否存在(不存在即建立)和獲取日誌大小(分隔日誌檔案),一般來說,日誌檔案存在的可能性大,所以直接獲取檔案大小即可,通過獲取日誌檔案大小乙個方法filesize,同時可判斷檔案是否存在,不存在建立檔案即可。這就減少乙個檔案操作方法的使用。如何使用filesize即可獲取大小,又可判斷檔案是否存在,又不離開當前流程,正常執行下去呢?大家可以思考一下,因為filesize乙個不存在的檔案是會報錯誤的哦。
總之,只要是檔案存在的可能性或者命中率高,就可考慮不要使用file_exists。
3). 類的載入中,使用精確載入並快取,不要遍歷目錄檔案的方式。如果在乙個請求中,只載入且只載入一次需要的類檔案是最好的。
4). 將檔案快取轉成記憶體快取。
優化系統效能
程式框架 hibernate3 struts2 spring2 資料庫 sqlserver2008 伺服器 tomcat6 優化方法 1 配置連線池 採用的c3p0連線池 2 在程式中獲取列表時,用iterator代替list 3 在查詢之後可以使用session.clear 方法釋放快取 4 用資...
Linux系統效能優化
由於各種的i o負載情形各異,linux系統中檔案系統的預設配置一般來說都比較中庸,強調普遍適用性。然而在特定應用下,這種配置往往在i o效能方面不能達到最優。因此,如果應用對i o效能要求較高,除了採用效能更高的硬體 如磁碟 hba卡 cpu mem等 外,我們還可以通過對檔案系統進行效能調優,來...
Android 系統效能優化
android作為一種移動裝置的作業系統,無法像pc機一樣具有強大的記憶體和cpu,這就意味著,我們的android應用程式無法無節制的使用記憶體和cpu資源。很多時候我們過多的使用這些資源時,會導致系統的卡頓或者程式anr。常見的記憶體使用異常主要包括兩種 記憶體溢位和記憶體洩露。記憶體溢位 指的...