推薦(免費):PHP7
No matter where I am, I will reply you immediately when I see the email.My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d
前言
十一半了,沉澱時間到了。
PHP在運作的時候,存在這樣的一個流程,先將PHP程式碼預先編譯,生成字節碼後再載入到記憶體裡,最後CPU在記憶體上執行編譯後的位元組碼片段。我們會發現,在執行PHP程式的時候,每次都經過這樣的流程,此非浪費Time,是的,很容易聯想到:為何不向C 語言看齊呢,將源碼編譯成可直接加載到內存so哥呢?呃呃?。快拿出你的步槍,裝上這顆子彈
OPcache
。自從PHP5.5.0出來後,就內建此zend擴充了。
What 是 OPcacheOPcache
是PHP中的Zend擴展,可以大幅提升PHP的效能。
OPcache 透過將 PHP 腳本預先編譯的字節碼儲存到共享記憶體來提升 PHP 的效能, 儲存預先編譯字節碼的好處就是 省去了每次載入和解析 PHP 腳本的開銷。
Judge whether it has been extended OPcache
➜ ~ php -m | grep OPcache Zend OPcache Zend OPcache
倘若沒有開啟的話,可以在php.ini設定中開啟
/home /samego/service/php7.2/php.ini➜ ~ echo zend_extension="opcache.so" >> /home/samego/service/php7.2/php.ini登入後複製
#About OPcache configure
接下來,我們需要在PHP 的設定檔中啟用OPcache (預設是關閉的):
opcache.enable=1
下面我們繼續對OPcache 進行一些優化配置:
opcache.memory_consumption=512
這個配置表示你想要分配給OPcache 的記憶體空間(單位:MB),設置一個大於64 的值即可。
opcache.interned_strings_buffer=64
這個配置表示你想要指派給實際字串的空間(單位:MB),設定一個大於 16 的值即可。
opcache.max_accelerated_files=32531
這個設定表示可以快取多少個腳本,將這個值盡可能設定為與專案包含的腳本數接近(或更大)。
opcache.validate_timestamps=0
改為配置值用於重新驗證腳本,如果設定為 0(效能最佳),則需要手動在每次 PHP 程式碼變更後手動清除 OPcache。如果你不想要手動清除,可以將其設為 1 並透過 opcache.revalidate_freq 設定重新驗證間隔,這可能會消耗一些效能,因為需要每隔 x 秒檢查更改。
opcache.save_comments=1
這個配置會在腳本中保留註釋,我推薦開啟該選項,因為有些函式庫依賴這個配置,我也找不出什麼關閉它的好處。
opcache.fast_shutdown=0
快速關閉會給一個更快速清理記憶體的機制,不過,在我的基準測試中,更慢一些,可能這會應用帶來一些效能提升,但是你需要自己去嘗試。
所以,最終的設定最佳化長這樣:
opcache.enable=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=64 opcache.max_accelerated_files=32531 opcache.validate_timestamps=0 opcache.save_comments=1 opcache.fast_shutdown=0
你可以使用這些設定值進行實驗,具體設定值取決於你的應用程式大小和伺服器設定。
學習Laravel社群
Laravel OPcache
install
➜ ~ composer require appstract/laravel-opcache
#configure
➜ ~ php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
command
場景:(1)請求GET介面(2)測試次數10 (3)並發數為100
case non-extension1000個請求,花費32.32秒,每秒30.94個請求
# Clear OPcache: ➜ ~ php artisan opcache:clear # Show OPcache config: ➜ ~ php artisan opcache:config # Show OPcache status: ➜ ~ php artisan opcache:status # Pre-compile your application code: ➜ ~ php artisan opcache:optimize
case had extend#1000個請求,花費2.94秒,每秒340.14個請求
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Transactions: 1000 hits
Availability: 100.00 %
Elapsed time: 32.32 secs
Data transferred: 0.97 MB
Response time: 0.32 secs
Transaction rate: 30.94 trans/sec
Throughput: 0.03 MB/sec
Concurrency: 9.96
Successful transactions: 1000
Failed transactions: 0
Longest transaction: 0.44
Shortest transaction: 0.11</pre><div class="contentsignin">登入後複製</div></div>
#
以上是利用 OPcache 擴充提升 PHP7 效能技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!