PHP 7主要開發者惠新宸表示,PHP 7是近10年來最大的版本升級,他同時也使用Zend Framework、Drupal及Laravel等多種框架,分別在PHP 5.6及PHP 7兩種環境進行測試。 而測試結果顯示,使用PHP 7有顯著的效能成長,像是Zend Framework及WordPress的效能增進甚至達1倍之譜。(圖片來源/惠新宸)

標榜十年來最大改版的PHP 7,最大亮點是翻倍的效能提升,但若只是現有網站的舊版PHP環境升級到新版,還不足以充分發揮PHP 7的能耐。

 密技1  啟用Zend Opcache

PHP 7 主要開發者惠新宸也公開了5個PHP開發者一定要知道的新版效能密技。

Opcache是一個將預先編譯的腳本程式快取在共用記憶體的功能,但PHP預設設定會關閉這項功能,因此,很多開發者會忘了善用這個優化機制。即使不啟用Opcache,PHP 7的效能已可超越5.6版,啟用後還可以更快。可以直接在php.ini檔中加入以下設定來啟用Opcache。

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

 密技2  使用新版編譯器

要將PHP腳本程式編譯成二進位檔時,惠新宸推薦使用GCC 4.8版以上的編譯器。他解釋,因為GCC 4.8版以上才會開啟Global Register對opline和execute_data的支援,有助於提高5%的效能。儘管舊版GCC支援,但舊版這項支援功能還有臭蟲,因此,惠新宸建議GCC得升級到4.8版以上。

 密技3  啟用HugePage

啟用Linux系統的HugePage(大型暫存分頁機制)可讓PHP的Text段落和記憶體中的分頁都改用HugePage來儲存,來減少TLB(Translation Lookaside Buffer)遺失而提高效能。原本系統記憶體多以4KB來分頁,但啟用HugePage後則改以2MB來分頁。

CPU存取記憶體時,得查表才能得知虛擬定址和記憶體定址間的轉換,CPU會透過TLB暫存來加速查表。

若分頁單位越小,分頁筆數就越多,查表時就會得建立越多TLB,容易造成暫存資料的遺失而得重查,啟用了大型HugePage分頁設定就能減少TLB數量而降低遺失的問題。

若以CentOS 6.5為例,可透過sudo sysctl vm.nr_hugepages=512指令,來分配512個預留的大型暫存分頁,然後在php.ini設定檔中加入 opcache.huge_code_pages=1的敘述就能啟用。

 ★ 延伸閱讀密技3 《讓你的PHP 7更快之Hugepage》

 密技4  Opcache檔案快取

開啟了Opcache File Cache功能後,可以將Opcache將Opcode暫存到外部檔暗中,有助於改善某些腳本程式的效能。

只需在php.ini設定檔中加入opcache.file_cache=/tmp,就可以在/tmp目錄下快取Opcode二進位檔案,可跨PHP生命周期存在。

 密技5  使用PGO預執行最佳化

如果PHP環境只用於執行單一程式,例如只來執行WordPress或Drupal,惠新宸建議,使用者可重新編譯PHP 7並使用GCC的PGO預執行最佳化機制,來編譯出一個專為你量身打造的特定PHP 7版本,來提高效能。

例如要優化WordPress 4.1時,可下達make prof-gen指令後,先用hp-cgi執行100次WordPress首頁程式來產生Profile資訊,再執行make prof-clean和make prof-use && make install,來編譯出一個量身打造的專屬高效能PHP 7版本。

惠新宸也選擇了WordPress 4.1作為優化場景,並示範編譯指令。

$ make prof-gen
$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null
$ make prof-clean
$ make prof-use && make install

 ★ 延伸閱讀密技5 《讓你的PHP 7更快之(GCC PGO)》


Advertisement

更多 iThome相關內容