隨著PHP 7的發布,PHP的性能得到了很大提升,其中一個主要功臣就是OPcache。在PHP 5.x的時代里,緩存器的選擇有很多,比如APCu、Xcache等,但它們都有一個共同的問題:它們只能緩存PHP文件的字節碼,而OPcache可以緩存文件的字節碼。
在PHP代碼被執行之前,PHP引擎將PHP文件翻譯成字節碼。這種字節碼是小型、易于解釋的二進制代碼,通常比原始PHP代碼快得多。OPcache將這些字節碼緩存到內存中,避免將相同的腳本字節碼重新解析為機器代碼——因為這個過程非常耗費時間。這樣做可以極大地提高PHP應用程序的性能和響應時間。
特別說明一下,PHP腳本緩存會將編譯好的文件(如訪問前綴為“http://localhost/index.php”的文件)保存在緩存中。每次請求時,會優先尋找緩存中是否有對應的文件,如果有,直接返回已經編譯好的文件,能夠顯著提高PHP網站的加載速度。
在opcache.validate注釋處,可以設置腳本緩存是否校驗文件,opcache.revalidate_force注釋可以設置過期時間,并強制重新驗證緩存。但修改了緩存文件下次加載仍然是上一個版本的內容,需要手動清空緩存文件。
在以上操作前, 要確保緩存是開啟的,opcache.enable返回的false表示緩存未開啟。
PHP 7的OPcache版本比PHP 5.x的版本更為健壯。OPcache 7可以持久緩存文件并在多個請求之間共享,一旦被緩存,就不會再被重新編譯。這使得PHP應用程序更快、更可靠,也沒有“閃爍時”的問題。PHP開發者們可以借此更快地開發功能、構建項目。
在使用OPcache的過程中,需要注意一些問題:
- 緩存大小——盡管緩存是好的,但太多的緩存會導致內存不足的問題。默認緩存大小為64MB,可以通過opcache.memory_consumption調整。
- 緩存文件過期——之前提及的opcache.revalidate_force注釋的修改將會沒有效果,我們需要讓緩存文件過期,再重新加載對應內容。這些時,就需要設置緩存文件的壽命(opcache.max_accelerated_files、opcache.file_update_protection),或者通過php.ini中opcache.frequency檢查緩存文件是否過期。
綜上所述,OPcache大大提高了PHP應用程序的性能和響應時間,在開發PHP應用程序時一定要注意它的使用和配置。