OPcache 透過將PHP 腳本預編譯的字節碼儲存到共享記憶體中來提升PHP 的效能, 儲存預編譯字節碼的好處就是省去了每次載入和解析PHP 腳本的開銷。 PHP 5.5 之後的版本都是預設綁定該擴充功能的,之前的 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 擴充功能中的 OPcache 函式庫。
設定項解釋
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
該組態項目是PHP手冊推薦,在php.ini 中間進行設置,關於每個組態項目的說明如下:
-
opcache.memory_consumption :OPcache 的共享記憶體大小,以兆位元組為單位。
-
opcache.interned_strings_buffer :用來儲存預留字串的記憶體大小,以兆位元組為單位。 PHP 5.3.0 之前的版本會忽略此設定指令。
-
opcache.max_accelerated_files :OPcache 哈希表中可儲存的腳本檔案數量上限。真實的取值是在質數集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個大於等於設定值的質數。設定值取值範圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 之後是 1000000。
-
opcache.revalidate_freq :檢查腳本時間戳記是否有更新的週期,以秒為單位。設定為 0 會導致針對每個請求, OPcache 都會檢查腳本更新。如果 opcache.validate_timestamps 設定指令設定為停用,那麼此設定項目將會被忽略。
-
opcache.validate_timestamps : 如果啟用,那麼 OPcache 會每隔 opcache.revalidate_freq 設定的秒數 檢查腳本是否更新。如果停用此選項,你必須使用 opcache_reset() 或 opcache_invalidate() 函數來手動重置 OPcache,也可以 透過重新啟動 Web 伺服器來使檔案系統變更生效。
-
opcache.fast_shutdown :如果啟用,則會使用快速停止續發事件。所謂快速停止續發事件是指依賴 Zend 引擎的記憶體管理模組 一次釋放全部請求變數的內存,而不是依序釋放每一個已分配的記憶體區塊。從 PHP 7.2.0 開始,此設定指令被移除。快速停止的續發事件的處理已整合到 PHP 中, 只要有可能,PHP 會自動處理這些續發事件。
更多設定項目說明請參考 OPcache手冊。
OPcache函數
#OPcache提供了一些內建函數,用於控製字節碼的快取狀態,使用前提是需要開啟OPcache 擴充。
-
opcache_compile_file :不需要執行即可編譯快取PHP腳本,如果單獨使用參數FILE 必填,FILE 為腳本路徑,例如:opcache_compile_file('index.php')
-
opcache_get_configuration :取得opcache 的目前所有設定資訊
-
opcache_get_status :取得opcache 的目前快取訊息,資訊包含共享記憶體空間是否滿載等
-
opcache_invalidate :廢除腳本緩存,有兩個參數,script (腳本路徑資訊) 必填,force(boolean) 選填,如果force 參數為true 強制廢除緩存,如果為false 或不填,那麼只有當腳本的修改時間比對應字節碼的時間更新,腳本的緩存才會失效。
-
opcache_is_script_cached :檢查腳本是否在OPCache中緩存,參數FILE(檔案路徑) 必填
-
opcache_reset :充值所有opcache 緩存,等待下次執行編譯
開發注意事項
在本機開發環境中,建議關閉OPcache 擴展,快取可能會讓本機調試產生很多問題,減低開發效率。
關於共享記憶體的知識擴展
共享記憶體是一種在相同機器中的應用程式之間交換資料的有效方式。記憶體對於程式的執行效率要高於磁碟I/O,所以合理的使用記憶體可以提升程式的效率。它的應用場景有web請求、資料庫查詢、模板引擎快取、以及目前文章裡提到的 OPcache 對於 PHP 的編譯快取。
相關教學推薦:《PHP教學》
以上是詳解PHP中的OPcache 擴展的詳細內容。更多資訊請關注PHP中文網其他相關文章!