Without a cache, every request lexes, parses and compiles each included file into opcodes, the instructions the Zend virtual machine executes, and throws them away at request shutdown. OPcache stores the compiled opcodes, with the strings and constant arrays they use, in shared memory that every worker of one FPM master maps. The first request that includes a file compiles it and stores it; later requests in any worker execute the stored copy. Since PHP 8.5, OPcache is always compiled into PHP, and opcache.enable (on by default) switches it for web SAPIs.

To see the opcodes, add -d opcache.enable_cli=1 -d opcache.opt_debug_level=0x10000 to a php command: it prints each function as RECV, INIT_FCALL, MUL and RETURN instructions.
On the Laravel 2,157 welcome page with a static pool of eight workers (wrk 40,414 -t4 -c16 -d10s), switching OPcache off with -d opcache.enable=0 dropped throughput from 1,406 to 75 requests per second, and mean latency rose from 11.4 ms to 210 ms: compiling 496 files is 95% of that request's work, which is why a cache that is too small, or keeps being reset, hurts so much.