PHP 7.4 에서 미리 불 러 오 는 방법 에 대한 자세 한 설명
PHP 7.4 는 코드 의 성능 을 향상 시 킬 수 있 는 사전 로드 지원 을 추가 했다.
이것 은 간단 한 프 리 로드 입 니 다:
Opcache,하지만 더
프 리 로드 는 최상 위 작업 인 opcache 에 구축 되 었 지만 완전히 같 지 않 습 니 다.Opcache 는 PHP 원본 파일 을 가 져 와'조작 코드'로 컴 파일 하고 컴 파일 된 파일 을 디스크 에 저장 합 니 다.
'조작 코드'를 코드 의 저급 표시 로 볼 수 있 으 며,실행 할 때 쉽게 설명 할 수 있 습 니 다.따라서 opcache 는 원본 파일 간 의 변환 절차 와 PHP 해석 기 가 실 행 될 때 실제 필요 한 내용 을 건 너 뜁 니 다.거대 한 승리!
하지만 더 많은 것 을 얻 을 수 있다.Opcached 파일 은 다른 파일 을 모 릅 니 다.A 클래스 에서 확 장 된 클래스 B 가 있다 면 실행 할 때 연결 해 야 합 니 다.또한,opcache 는 원본 파일 이 수정 되 었 는 지 확인 하고 이 파일 을 기반 으로 캐 시 를 무효 로 합 니 다.
그래서 이것 이 바로 미리 불 러 오 는 역할 을 하 는 곳 입 니 다.원본 파일 을 조작 코드 로 컴 파일 할 뿐만 아니 라 관련 클래스,특징 과 인 터 페 이 스 를 연결 합 니 다.그리고 이"컴 파일 됨"의 실행 가능 한 코드 blob-즉,PHP 해석 기 에서 사용 할 수 있 는 코드-메모리 에 있 습 니 다.
서버 에 도 착 했 을 때,이 제 는 메모리 에 불 러 온 일부 코드 라 이브 러 리 를 사용 할 수 있 으 며,비용 이 들 지 않 습 니 다.
그렇다면 우리 가 이야기 하 는 것 은'코드 라 이브 러 리 의 어떤 부분'입 니까?
실천 중 미리 불 러 오기
미리 불 러 오 는 작업 을 위해 서 개발 자 는 서버 에 어떤 파일 을 불 러 올 지 알려 야 합 니 다.이것 은 간단 한 PHP 스 크 립 트 를 통 해 이 루어 진 것 이기 때문에 무 서운 것 이 없다.
규칙 은 매우 간단 하 다.
다음은 php.ini 에서 이 스 크 립 트 를 연결 하 는 방법 입 니 다.
opcache.preload=/path/to/project/preload.php
이것 은 가상 실현 이다.
$files = /* An array of files you want to preload */;
foreach ($files as $file) {
opcache_compile_file($file);
}
opcachecompile_file,include 파일 을 대신 사용 할 수도 있 습 니 다.작성 할 때 효과 가 없 는 것 같 기 때문에개 버그이 있 는 것 같 습 니 다.경고:링크 되 지 않 은 클래스 를 미리 불 러 올 수 없습니다.
버 텨 라,경고 가 하나 있다!파일 을 미리 불 러 오기 위해 서 는 의존 항목-인터페이스,특징,부모 클래스 를 미리 불 러 와 야 합 니 다.
클래스 의존 항목 에 문제 가 있 으 면 서버 가 시 작 될 때 알 수 있 습 니 다:
Can't preload unlinked class
Illuminate\Database\Query\JoinClause:
Unknown parent
Illuminate\Database\Query\Builder
opcache 참조compile_file()은 파일 을 분석 하지만 실행 하지 않 습 니 다.이것 은 미리 불 러 오지 않 은 의존 항목 이 있 으 면 그 자체 도 미리 불 러 올 수 없다 는 것 을 의미한다.
이것 은 치 명 적 인 문제 가 아 닙 니 다.서버 가 정상적으로 작 동 할 것 입 니 다.하지만 당신 이 진정 으로 원 하 는 모든 프 리 셋 파일 을 가지 고 있 지 는 않 을 것 입 니 다.
모든 의존 항목 을 해결 하기 위해 어떤 파일 을 미리 불 러 오 는 지 주의해 야 하 는 이유 다.수 동 으로 이 작업 을 수행 하 는 것 은 고역 처럼 보일 수 있 기 때문에 자 연 스 럽 게 사람들 은 자동화 솔 루 션 을 개발 하고 있다.
Composer 지원
가장 유망 한 자동화 솔 루 션 은 coposer 에서 나 왔 으 며,현재 대부분의 현대 PHP 프로젝트 에서 사용 되 고 있다.
사람들 은 미리 불 러 오 는 설정 옵션composer.json 을 추가 하여 미리 불 러 오 는 파일 을 만 들 려 고 노력 하고 있 습 니 다!미리 불 러 온 것 처럼 이 기능 은 계속 진행 되 고 있 지만여기 서 작업 을 진행 합 니 다.에 있 을 수 있 습 니 다.
다행히 원 하지 않 는 다 면 미리 불 러 오 는 파일 을 수 동 으로 설정 하지 않 아 도 됩 니 다.coposer 는 이 점 을 해 줄 수 있 습 니 다.
서버 요구 사항
미리 불 러 올 때 devops 를 사용 하 는 데 있어 서 더 중요 한 것 은 두 가지 가 있 습 니 다.
php.ini 에 항목 을 지정 해 야 미리 불 러 올 수 있다 는 것 을 알 고 있 습 니 다.공유 호스트 를 사용 하면 필요 에 따라 PHP 를 자 유 롭 게 설정 할 수 없다 는 뜻 입 니 다.
실제로 하나의 프로젝트 에 미리 불 러 온 파일 을 최적화 하기 위해 서 는 전용(가상)서버 가 필요 합 니 다.그 러 니까 그 걸 기억 해.
php-fpm 를 기억 해 야 합 니 다.메모리 에 있 는 파일 을 다시 불 러 올 때마다 서버 를 다시 시작 해 야 합 니 다.(사용 하고 있다 면 충분 합 니 다.)대부분의 사람들 에 게 는 뻔 한 것 같 지만 언급 할 만하 다.
성능
현재 가장 중요 한 문 제 를 이야기 하고 있 습 니 다.프 리 로드 는 실제로 성능 을 향상 시 켰 습 니까?
답 은 긍정 적 이다.물론 Ben Morel 은 몇 가지 기준 을 공 유 했 기 때문에 이전 과 관련 된같은 composer문제 에서 찾 을 수 있다.
재 미 있 는 것 은'인기 클래스'만 미리 불 러 오기 로 결정 할 수 있 습 니 다.코드 라 이브 러 리 에서 자주 사용 하 는 클래스 입 니 다.Ben 의 기준 테스트 에 따 르 면 약 100 개의 인기 클래스 만 불 러 오고 실제 적 으로 모든 것 을 불 러 오 는 것 보다 더 좋 은 성능 을 향상 시 키 는 것 으로 나 타 났 다.성능 향상 13%와 17%의 차이 다.
특정 항목 에 의존 하 는 종 류 를 미리 불 러 와 야 합 니 다.시작 할 때 가능 한 한 간단하게 로드 하 는 것 이 현명 하 다.만약 몇 퍼센트 를 추가 해 야 한다 면,실행 할 때 코드 를 감시 해 야 합 니 다.
이 모든 것 은 당연히 자동화 할 수 있 을 뿐만 아니 라,장래에 완 성 될 수도 있다.
지금 가장 중요 한 것 은 copser 가 지원 을 추가 한 다 는 것 을 기억 하 는 것 입 니 다.그러면 미리 설 치 된 파일 을 만 들 필요 가 없습니다.그리고 이 기능 은 서버 에 쉽게 설정 할 수 있 습 니 다.완전히 제어 할 수 있 기 때 문 입 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.