opcache는 zend 엔진 컴파일로 생성된 opcode를 캐시하는 데 사용되므로 다음에 컴파일할 필요가 없습니다.
최근에 PHP jit에 대해 듣고 jit의 개념에 대해 살펴보았습니다.
JIT 컴파일(Just-In-Time 컴파일), 즉 좁은 의미의 Just-In-Time 컴파일은 특정 코드 조각이 처음 실행될 때 컴파일된 후 실행되는 것을 의미합니다. 컴파일 없이 직접 실행되는 것은 동적 컴파일의 특별한 경우입니다.
PHP의 jit과 opcache의 차이점은 무엇인가요?
源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)
来看下PHP的执行流程,假设有个a.php文件,不启用opacache的流程如下:
a.php->经过zend编译->opcode->PHP解释器->机器码
启用opacache的流程如下
a.php->查找opacache缓存,如果没有则进行zend编译为opcode并缓存->opacode->PHP解释器->机器码
启用jit的流程如下
a.php->编译->机器码
이제부터는 컴파일 없이 기계어 코드만 실행되므로 훨씬 더 효율적입니다
JIT의 개념은 실제로 Java에서 유래되었습니다. Java에서 JIT 컴파일러는 바이트코드를 기계어 코드로 컴파일하는 프로세스입니다.
PHP와 Java가 매핑된다면 PHP를 OpCode로 컴파일하는 과정은 Java를 바이트코드로 컴파일하는 과정이고, 더 나아가 PHP의 JIT는 OpCode를 기계어 코드로 컴파일하는 과정입니다.
좀 더 간단히 말하면, PHP 프로그램은 OpCode로 컴파일된 후 PHP 인터프리터에게 넘겨져 실행됩니다. 이 과정은 여전히 해석과 실행의 과정입니다. 그리고 JIT를 통해 기계어로 컴파일하면 프로그램의 실행 효율성이 크게 향상될 수 있다.
몇몇 널리 사용되는 스크립팅 언어에는 이미 자체 JIT가 있지만 PHP는 이러한 측면이 여전히 부족합니다. 그럼 기대하세요, PHP 8을 기대하세요