详解PHP中的OPcache 扩展
OPcache 通過(guò)將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來(lái)提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 PHP 腳本的開(kāi)銷(xiāo)。PHP 5.5 之后的版本都是默認(rèn)綁定該擴(kuò)展的,之前的 PHP 5.2,5.3 和 5.4 版本可以使用 ? PECL 擴(kuò)展中的 OPcache 庫(kù)。
配置項(xiàng)解釋
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
該配置項(xiàng)是PHP手冊(cè)推薦,在 php.ini 中間進(jìn)行設(shè)置,關(guān)于每個(gè)配置項(xiàng)的說(shuō)明如下:
opcache.memory_consumption :OPcache 的共享內(nèi)存大小,以兆字節(jié)為單位。opcache.interned_strings_buffer :用來(lái)存儲(chǔ)預(yù)留字符串的內(nèi)存大小,以兆字節(jié)為單位。 PHP 5.3.0 之前的版本會(huì)忽略此配置指令。opcache.max_accelerated_files :OPcache 哈希表中可存儲(chǔ)的腳本文件數(shù)量上限。 真實(shí)的取值是在質(zhì)數(shù)集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個(gè)大于等于設(shè)置值的質(zhì)數(shù)。 設(shè)置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。opcache.revalidate_freq :檢查腳本時(shí)間戳是否有更新的周期,以秒為單位。 設(shè)置為 0 會(huì)導(dǎo)致針對(duì)每個(gè)請(qǐng)求, OPcache 都會(huì)檢查腳本更新。如果 opcache.validate_timestamps 配置指令設(shè)置為禁用,那么此設(shè)置項(xiàng)將會(huì)被忽略。opcache.validate_timestamps : 如果啟用,那么 OPcache 會(huì)每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。 如果禁用此選項(xiàng),你必須使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來(lái)手動(dòng)重置 OPcache,也可以 通過(guò)重啟 Web 服務(wù)器來(lái)使文件系統(tǒng)更改生效。opcache.fast_shutdown :如果啟用,則會(huì)使用快速停止續(xù)發(fā)事件。 所謂快速停止續(xù)發(fā)事件是指依賴 Zend 引擎的內(nèi)存管理模塊 一次釋放全部請(qǐng)求變量的內(nèi)存,而不是依次釋放每一個(gè)已分配的內(nèi)存塊。從 PHP 7.2.0 開(kāi)始,此配置指令被移除。 快速停止的續(xù)發(fā)事件的處理已經(jīng)集成到 PHP 中, 只要有可能,PHP 會(huì)自動(dòng)處理這些續(xù)發(fā)事件。
更多配置項(xiàng)說(shuō)明請(qǐng)參考 OPcache手冊(cè)。
OPcache函數(shù)
OPcache提供了一些內(nèi)置函數(shù),用于控制字節(jié)碼的緩存狀態(tài),使用前提是需要開(kāi)啟 OPcache 擴(kuò)展。
opcache_compile_file :不需要運(yùn)行即可編譯緩存PHP腳本,如果單獨(dú)使用參數(shù) FILE 必填,FILE 為腳本路徑,例如:opcache_compile_file('index.php')opcache_get_configuration :獲取 opcache 的當(dāng)前所有配置信息opcache_get_status :獲取 opcache 的當(dāng)前緩存信息,信息包含共享內(nèi)存空間是否滿載等opcache_invalidate :廢除腳本緩存,有兩個(gè)參數(shù),script (腳本路徑信息) 必填,force(boolean) 選填,如果 force 參數(shù)為 true 強(qiáng)制廢除緩存,如果為 false 或不填,那么只有當(dāng)腳本的修改時(shí)間 比對(duì)應(yīng)字節(jié)碼的時(shí)間更新,腳本的緩存才會(huì)失效。opcache_is_script_cached :檢查腳本是否在OPCache中緩存,參數(shù) FILE(文件路徑) 必填opcache_reset :充值所有 opcache 緩存,等待下一次執(zhí)行編譯
開(kāi)發(fā)注意事項(xiàng)
在本地開(kāi)發(fā)環(huán)境中,建議關(guān)閉 OPcache 擴(kuò)展,緩存可能會(huì)讓本地調(diào)試產(chǎn)生很多問(wèn)題,減低開(kāi)發(fā)效率。
關(guān)于共享內(nèi)存的知識(shí)擴(kuò)展
共享內(nèi)存是一種在相同機(jī)器中的應(yīng)用程序之間交換數(shù)據(jù)的有效方式。內(nèi)存對(duì)于程序的執(zhí)行效率要高于磁盤(pán)I/O,所以合理的使用內(nèi)存可以提升程序的效率。它的應(yīng)用場(chǎng)景有web請(qǐng)求、數(shù)據(jù)庫(kù)查詢、模板引擎緩存、以及當(dāng)前文章里提到的 OPcache 對(duì)于 PHP 的編譯緩存。
相關(guān)教程推薦:《PHP教程》
總結(jié)
以上是生活随笔為你收集整理的详解PHP中的OPcache 扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS如何切换app store国家?i
- 下一篇: 如何找回苹果Apple ID安全提示问题