OPCode Caching – PHP

N.B : Writing about things helps me understand how things work end to end because it forces you to fill the gaps you have in your mind when you only think about thingsI wrote about this here

PHP is an interpreted language, although shares some similarities with other compiled languages like java in how it parses and compiles its source files.

Java for example compiles source code to bytecodes which can be saved as a binary and then executed over and over again on a Virtual machine (JVM).

PHP also compiles its source code to an intermediate language called the OpCodes but unlike compiled languages, a binary file is not generated that can be executed over and over again. Instead, we go through the whole parsing and compilation process each time we execute the script even when there are no changes.


PHP Interpreter vs Java Compiler
Reference: support.cloud.engineyaard

The OpCode Caching was created to prevent parsing and compiling the source code every time the same script was executed. It saves the OpCodes for a script the first time and then uses the OpCodes in the cache for subsequent requests for the same script.


Modified PHP execution flow with the OpCode Cache Enabled.
Reference: support.cloud.engineyaard

The Zend OpCache comes bundled with recent PHP versions (5.5+) and to enable it is pretty easy, just set the  opcache.enable=1 in your php.ini file. You can install Zend OpCache for older PHP versions and also check the documentation here: ZendOptimizerPlus.

Enabling the OpCache in the development environment is not advisable because it can cause your changes not to reflect immediately which can be quite annoying. You can follow this article here: laravel-news-php-opcache-docker If you have your application dockerized and want to disable OpCache only in development environment.

Additional Resources: