php高性能接口怎麼設計php
php接口設計要考慮性能,這樣纔能有效面對高併發的狀況,下面來講說PHP接口優化提升性能的幾條技巧。sql
1、服務器數據庫
從配置上作提高,對於系統總體的執行效率是至關明顯的,這一點沒有什麼好質疑的,只要有實力,天然就能夠多在這方面作提高了。數組
2、數據查詢緩存
這個查詢的優化,涉及sql的優化,或者到數據庫的優化,下面有幾個簡單的優化方案。服務器
1. sql的優化,適當使用鏈表查詢,使用鏈接(JOIN)來代替子查詢,通常大表和多表的狀況避免使用JOIN,這種狀況下使用JOIN反而達不到簡化查詢的效果。併發
2. sql的優化,查詢表數據時精確字段名進行查詢,避免沒必要要的字段查詢。函數
3. sql的優化,適當使用主外鍵和索引,索引字段的查詢效率在大表查詢的效率對比至關明細。可是針對對索引得使用,稍做備註。索引在不少狀況下是會失效得,好比,索引列得字段內容若總體佔比過大,那這個索引也就沒什麼做用了;not in ,not exist 中也是無效得;對索引列進行運算.須要創建函數索引等高併發
4. sql的優化,適當使用in查詢,儘可能少用,最好用union代替,效率會明顯高 。 用in時,儘可能使用索引字段。sql的優化,適當使用模糊查詢。最好不用,替換成全等,由於模糊中沒法用索引性能
5. 數據庫的優化,字段使用合理的字段類型,另一個提升效率的方法是在可能的狀況下,應該儘可能把字段設置爲NOTNULL,避免空間浪費。
6. 數據庫的優化,合理設計表結構。好比,有時多些必要得冗餘得字段,要好過連表查詢。
7. 數據庫的優化,合理設計索引,在聯表查詢或條件篩選中,數據表增長索引後查詢的效率會快特別多。
3、代碼優化
代碼上的優化也是因人而異的,每一個人可能編碼習慣和風格不一樣,對於提升代碼性能有各自的看法,如下是個人部分見解。
1. foreach合理使用,儘可能少在循環中套用循環,在循環次數過多的狀況下,很是耗性能。
2. 循環中,儘可能避免數據操做,特別是查詢操做,在循環次數過多的狀況下,屢次調用效率很低,可一次獲取數據再拼接。
3. 同理,在循環中,避免配置的屢次獲取,和time()函數方法的調用,這種一次聲明就能夠重複使用。
4. 在php中,單引號和雙引號是有區別的,做爲一種習慣字符串我都用單引號,由於它無需編譯,對於效率,可能談不上差別大小,可能就一點點
5. 合理利用在php中的函數,像數組函數就很是豐富,要充分利用,通常不要本身去作他自己就支持的函數方法
6. 能夠用上字典的概念,將數組以新索引形式存儲起來,我在數據的重組中很經常使用
7. 根據場景,合理使用緩存能夠減小重複的數據查詢,提升效率
8. 合理拆分功能,好比一個列表查詢,並帶有詳情查看,能夠將此處拆成兩個接口實現,在須要時獲取數據,減小資源浪費。
4、業務邏輯優化
跟響應無關的程序(如記錄日誌等)耗時過多,使用fastcgi_finish_request()函數沖刷(flush)全部響應的數據給客戶端並結束請求, 這使得客戶端結束鏈接後,須要大量時間運行的任務可以繼續運行,且不影響響應客戶端的時音。
`echo` `'例子:'``;` `file_put_contents``(``'log.txt'``,` `date``(``'Y-m-d H:i:s'``) .` `" 上傳視頻\n"``, FILE_APPEND);` `fastcgi_finish_request();` `sleep(1);` `file_put_contents``(``'log.txt'``,` `date``(``'Y-m-d H:i:s'``) .` `" 轉換格式\n"``, FILE_APPEND);` `sleep(1);` `file_put_contents``(``'log.txt'``,` `date``(``'Y-m-d H:i:s'``) .` `" 提取圖片\n"``, FILE_APPEND);`