高性能PHP7【筆記】

一、搭建環境

二、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


分享到:


相關文章: