一、搭建環境
二、PHP7新特性
A.OOP特性
PHP7支持的形參類型聲明的類型有整型、浮點型、字符串型、布爾類型,可以用在函數形參及對象的方法形參上
返回類型聲明使用了data-type語法,對於形參類型聲明與返回類型聲明一樣的情況是無影響的,這樣就能區分開它們各自的返回數據類型了
使用類型聲明有一個明顯的好處,即它可以讓函數、方法的形參與返回值有所預期,避免出現不必要的數據傳遞,從而造成錯誤
非混合模式的use聲明:use 命名空間\{類1,類2},use function 命名空間\(方法1,方法2),use const 命名空間\{常量1,常量2}
混合模式的use聲明:use 命名空間\{類1,類2,function 方法1,function 方法2,const 常量1,const 常量2}
複合模式的use聲明:use 命名空間\{命名空間1\類1,命名空間2\類2}
3.匿名類
匿名類的聲明與使用是同時進行的,具備其他類所具備的所有功能,差別在於匿名類沒有類名
匿名類的一次性小任務代碼流程對性能提升幫助很大,不必將整個類寫完後再使用它
語法:new class(argument){definition};
4.Throwable接口
PHP7提供了一種全局的接口,使得所有的類都可以基於此使用throw關鍵字
從PHP7開始,任何完事程序或一部分程序中的Fatal錯誤都可以被截獲
-
大多數的Fatal錯誤都會拋出一個error實例,類似於截獲異常,error實例可以被try/catch截獲
B.新的操作符
1.太空船操作符(<=>)
在比較變量時非常有用,包括數值(字符串型、整型、浮點型等)、數組、對象
當符號兩邊相等時返回0
當符號右邊大於符號左邊時返回-1
當符號左邊大於符號右邊時返回1
可以用於書寫清晰易讀的用於usort、uasort、uksort的回調函數
2.null合併運算符(??)
用於代替isset(x)?x:’’;
3.統一變量語法
C.其他特性和變更
1.常量數組:const STORES = [‘en’, ’fr’, ‘ar’]; php7:define(’STORES’,[‘en’, ’fr’, ‘ar’]);
2.Switch中的多個default默認值,在php7中會產生Fatal級別的錯誤
3.Session_start函數中的選項數組:可以在調用session_start([...])傳遞參數選項數組,這些設置信息將覆蓋php.ini中的session配置
4.Unserialize函數引入過濾器
三、PHP7應用性能提升
A.HTTP Server優化
1.緩存靜態文件
2.HTTP持久鏈接:表示一條TCP/IP鏈接上承載著多個上下行請求
3.GZIP壓縮
4.PHP獨立部署服務
5.關閉不用的模塊
B.內容分發網絡(CDN)
1.CDN網絡通常服務於媒體文件
C.CSS與JavaScript優化
1.合併:將所有CSS、JS文件進行合併
2.縮小:刪除空行、註釋和額外空格
3.Minify:是一組完全使用PHP編寫的庫,支持CSS、JavaScript文件的合併與縮小,代碼是面向對象和命名空間的
4.Grunt:是一個JavaScript任務運行器,能夠將某些重複的任務自動化,避免反覆工作
5..全頁緩存
6.Varnish:開源的Web應用程序加速器
D.基礎設施
1.Web服務器
2.數據庫服務器
3.負載均衡(LB)
負載均衡器(LB),根據每個Web服務器上的負載情況,將外網流量以一定規則分發給Web服務器
HAProxy,會檢查每個Web服務器的運行狀況
四、提升數據庫性能
A.MySQL
1.查詢緩存
SHOW VARIABLES LIKE ‘hav_query_cache’;
my.cnf文件中的配置參數:query_cache_type,query_cache_size,query_cache_limit
2.存儲引擎
innodb_buffer_pool_size:系統內存的50%-80%
innodb_buffer_pool_instances:每1GBinnodb_buffer_pool_size設置1,如16GB的innodb_buffer_pool_size則設置為16
innodb_log_file_size:1-4GB之間
3.Percona Server - MySQL的fork
對MySQL完全兼容且提供加強功能,可完全代替MySQL並能提供更好的文檔、性能、擴展性
使用改進的Innodb,XtraDB引擎
4.MySQL性能監控工具
phpMyAdmin
Percona工具箱:pt-query-digest生成查詢報告,pt-duplicate-key-checker找出重複索引和外鍵,pt-variable-advisor輸出MySQL的配置信息以及對於每次查詢的建議
B.Redis鍵值緩存存儲
C.Memcached鍵值緩存存儲
五、調試和分析
A.Xdebug
六、PHP應用的壓力/負載測試
A.Apache JMeter
B.ApacheBench(ab)
C.Siege
七、PHP編程最佳實踐
A.代碼風格
1.類名中每個單詞的首字母必須大寫,左大括號應該在類名後新起一行,右大括號應該在類結束後新起一行
2.類的方法和函數命名應該是駝峰式的,參數和緊跟著的逗號之間不應有空格
4.Visibility類的所有屬性都應該明確指出其可見性並且屬性名應該是駝峰式的
5.要是有abstract關鍵字的話,則一定是在class關鍵字之前 的,final關鍵字則應該在方法可見性之前,static關鍵字是在方法可見性之後的
6.所有PHP關鍵字都應該小寫,包括true和false,常量應該都大寫
7.對於所有控制結構語句,控制結構關鍵詞後都應該有空格,表達 式和外面的括號之間不應該有空格,
B.測試驅動開發
1.PHPUnit
C.部署和持續集成(CI)
1.PHPCI
2.Jenkins
3.Travis CI
https://github.com/zhangyue0503/php/tree/master/learningphp7highperformance/2
閱讀更多 ZyBlog 的文章
關鍵字: 聲明 編程語言 JavaScript