(1)升級最新的PHP版本
鳥哥PPT裏的對比數據,就是WordPress在PHP5.6執行100次會產生70億次的CPU指令執行數目,而在PHP7中只須要25億次,減小64.2%。
參考:PHP的性能演進(從PHP5.0到PHP7.1的性能全評測)php
(2)減小include和require的使用
include和require方法中包含了文件讀取邏輯,大量使用會形成性能的降低.
解決這個問題可使用APC加速器組件,緩解此類問題.html
(3)使用局部變量代替全局變量
局部變量的速度比全局變量運行的速度要快,使用局部變量能夠提升運行效率,同時也易於管理.mysql
(4)使用靜態函數和方法
結合實際狀況,儘可能添加static標籤,使用靜態函數或者方法,能夠有效的提高執行速度.正則表達式
(5)及時釋放無用的變量和資源
PHP自帶內存回收機制,可是咱們不能過度的依賴,咱們要經過unsettle方法,或者直接設置爲null的方式來及時的釋放無用的變量和資源.redis
(6)使用單引號代替雙引號
單引號和雙引號均可以用來包含字符串,可是雙引號有字符轉義和變量解析的邏輯,因此儘可能使用單引號,提高執行效率.算法
(7)減小
@
屏蔽錯誤的使用
@
號能夠用來屏蔽報錯的信息,可是須要注意的是@
會下降腳本的運行速度.sql
(8)減小PHP中OOP的使用
使用OOP來構建程序框架比較便捷,可是可能會產生額外的系統開銷.因此咱們要根據實際狀況合理的使用OOP思想.數據庫
(9)使用抽象類代替接口
PHP中使用接口(interface)的成本比較高,咱們應該儘可能避免使用,可使用抽象類(abstract class)來代替.數組
(10)減小正則表達式的使用
正則表達式的執行成本十分的高昂,儘可能使用PHP中自帶的字符串處理函數來代替.緩存
(11)壓縮須要存儲的數據
例如咱們保存IP地址的時候可使用ip2long函數把IP地址轉化成整數型數據存儲,使用的時候經過long2ip函數還原.
對大數據還可使用gzcompress和gzuncompress進行壓縮和解壓.
(12)使用高效的PHP語句
分支語句效率:switch ... case>if ... elseif ... else.
循環語句效率:foreach>for>while.
疊加語句效率:++$i>$i++.
(13)使用高效的PHP函數
字符打印函數效率:echo>print
字符替換函數效率:strtr>str_replace>preg_replace
數組查詢函數效率:array_key_exists>isset>in_array
(1)在PHP session設置中避免開啓auto_start,一般在使用的時候在使用session_start函數開啓,減小資源消耗.
(2)合理設置session的有效期,有效期設置過長致使出現負載問題,一般設置在1到8小時之間.
(3)PHP session默認使用文件存儲,咱們能夠經過php.ini中的session_handle選項選擇須要的存儲方式,常見的有數據庫和高速緩存服務Memcache Redis等.
(1)Memcache
(2)Redis
(1)使用慢查詢.
在MySQL數據庫配置文件my.cnf中加入配置,使用show status like 'Slow%'查看慢查詢數量.
分析查詢時間大於設置時間的SQL語句,使用explain語句.
(2)使用索引
where:使用肯定性的判斷添加字段通常加索引
like: 'faf%'使用索引,'%faf%'不能使用索引
少用不肯定的判斷.如:!=,is not null, not in等.索引很是佔據空間,合理建立索引.
(3)使用表關聯須要慎重
經常使用的內鏈接(inner join)和左鏈接(left join)每次進行關聯查詢的時候都會對兩張數據表的笛卡爾乘積進行查詢,掃描數量大,因此咱們儘可能使用添加冗餘字段避免表關聯,使用空間換時間.
若是難以免使用表關聯,那麼咱們最好給關聯的字段創建索引.
不要使用SQL的子查詢,效率很是的低.
(4)使用MySQL中查詢條件和函數要謹慎
不要使用查詢數量的COUNT(*),而是使用COUNT(1).
儘可能不要使用DISTINCT.
group by計算十分消耗資源.
max(),min(),substr(),concat(),date_format(),to_days()等都會加大數據庫負擔.
咱們應儘可能讓數據庫負責查詢工做,其餘使用PHP來作.
(1)主從結構
主庫負責數據寫入,從庫負責數據查詢,主庫寫入後快速同步從庫.
主從架構既能避免讀寫形成的鎖表問題,又能多臺從庫分擔訪問.
但應該注意同步不及時問題.例如,用戶修改信息時,主庫更新.而從從庫獲取數據時,從庫卻沒有從主庫同步過來.就會形成信息無變化現象.
(2)集羣(Cluster)
當主從結構沒法知足需求時,咱們可使用集羣結構.由衆多的主從結構數據庫組成集羣.
集羣架構對分佈式邏輯要求比較高,一般是使用惟一的字段做爲分佈式數據的ID,經過散列分佈算法得到數據所在位置,常見的算法有取模算法,一致性散列算法等.
還能夠按照數據庫名來實現分佈式存儲數據.這種算法比較簡單實用,因爲數據庫的相關功能不一樣,每一個數據庫訪問量和數據量也不平均,因此能夠按照數據庫名來處理.