새로운 PHP 8의 변경 사항이 WordPress 웹사이트의 성능에 미치는 영향
게시 됨: 2023-05-04오늘날 최고의 프로그래밍 언어 중 하나인 PHP는 웹 개발 및 코딩을 보다 유연하게 만드는 새로운 방법을 제공합니다. PHP 8.0 및 PHP 8.1의 도입으로 PHP는 더 나은 구문, 보안 등을 제공하는 새로운 기능으로 더 많은 것을 제공하는 것을 목표로 합니다.
PHP 8.0의 새로운 기능과 모든 특수 기능에 대해 자세히 알아보려면 아래를 계속 읽으십시오. 이전 버전의 모든 주요 업데이트 및 개선 사항과 이러한 업데이트가 WordPress 사이트에 어떤 영향을 미칠 수 있는지 알아보십시오.
PHP 8.0 업데이트 이해
PHP 8.0 업데이트는 전 세계적으로 개발자와 웹사이트에 상당한 변화를 제공합니다. 2020년에 출시되었으며 혁신적인 RFC(Request-For-Comments) 및 기타 기능을 통해 일반적으로 더 나은 성능, 구문, 유형 안전성 및 오류 처리를 자랑하는 새로운 기능과 개선 사항을 약속했습니다.
PHP 5와 PHP 7 사이의 성능 차이만큼 눈에 띄지는 않지만 PHP 8.0은 각 릴리스에서 꾸준한 개선을 제공합니다. 또한 PHP 7에서 PHP 7.4까지의 대부분의 변경 사항은 대부분 사용되지 않습니다.
PHP 8.0과 PHP 8.1 모두 개발자가 더 빠르고 유연하게 코딩할 수 있도록 새로운 기능을 도입했습니다. 다음은 개발자가 고려해야 할 가장 주목할만한 제안 중 일부입니다.
적시 컴파일
Just-In-Time 또는 JIT 컴파일러는 최신 PHP 버전에서 가장 새로운 기능 중 하나입니다. 이 RFC를 통해 개발자는 컴파일을 우회하여 성능과 메모리 사용을 상당히 개선할 수 있습니다.
PHP는 이 RFC를 Opcache의 거의 독립적인 부분으로 구현합니다. JIT를 활성화하면 개발자는 Zend VM과 같은 타사 프로그램 대신 CPU를 통해 코드를 실행하여 계산 속도를 높일 수 있습니다.
더 나은 숫자 코딩 솔루션 외에도 JIT는 "일반적인" PHP 웹 애플리케이션 코드에 대해 잠재적으로 더 나은 성능을 제공합니다. 또한 PHP는 이제 JIT를 통해 더 빨라질 것이므로 C에서 PHP로 더 많은 코드를 이동할 가능성이 있습니다.
또한 PHP 8.0에는 추적 및 1.5라는 두 가지 JIT 컴파일러가 도입되었습니다. 두 가지 중에서 추적 JIT는 합성 벤치마크에서 약 3배의 성능을 보여 가장 가능성이 높습니다. 한편, 1.5는 장기 실행 애플리케이션에서 두 배의 성능 향상을 제공합니다.
명명된 인수
최신 PHP 버전은 기존 위치 매개변수를 확장하기 위해 명명된 인수를 제공합니다. 이제 개발자는 위치 대신 매개변수 이름을 기반으로 함수에 입력 데이터를 전달할 수 있습니다. 이 때문에 명명된 인수는 개발자에게 다양한 이점을 제공합니다.
첫째, 인수의 의미가 자체 문서화되기 때문에 더 이해하기 쉬운 코드를 만들 수 있습니다. 또한 순서에 독립적이므로 개발자가 함수 서명과 같은 방식으로 함수에 인수를 전달할 필요가 없습니다.
또한 개발자가 인수를 위치 인수와 결합하는 것도 가능합니다. 또한 변경하려는 인수를 지정할 수 있습니다. 이렇게 하면 기본값을 덮어쓰지 않으려면 인수를 조정할 필요가 없습니다.
명명된 인수는 클래스 또는 유형 선언에도 편리합니다.
유니온 타입 2.0
이전 PHP 버전에서 개발자는 문서 주석에 공용체 유형만 지정할 수 있었습니다. PHP는 "?Type 구문"과 "iterable" 클래스를 제외하고 지원을 제공하지 않았습니다.
PHP 8.0은 공용체 유형 2.0 RFC를 통해 함수 서명에서 공용체 유형을 지원하는 것을 목표로 합니다. 이 업데이트를 통해 개발자는 더 이상 인라인 문서에 의존하지 않습니다.
또한 PHP에서 공용체 유형을 지원하면 개발자가 phpdoc에서 함수 서명으로 다양한 클래스의 정보를 이동할 수 있습니다. 이로 인해 실수를 조기에 포착하고 유형 정보가 오래되지 않도록 방지하고 상속 중에 유형을 확인하는 등 다양한 이점을 얻을 수 있습니다.
Nullsafe 연산자
이전에는 개발자가 메서드 호출에 null 병합 연산자를 사용할 수 없었습니다. 타사 프레임워크의 중간 검사 또는 선택적 도우미가 필요합니다. 그러나 새로운 nullsafe 연산자를 사용하면 개발자가 메서드에 이러한 기능을 가질 수 있습니다. 이는 개발자가 이제 null 검사 조건 대신 일련의 호출을 사용할 수 있음을 의미합니다. 체인의 한 요소에 대한 평가가 실패하면 전체 실행 체인이 중지되고 전체 체인이 "null"로 평가됩니다.
속성 V2
일반적으로 다른 언어에서 주석이라고 하는 속성은 개발자가 개체, 요소 또는 파일의 속성을 지정하는 데 사용할 수 있는 구조화된 메타데이터입니다. 개발자는 이 기능을 사용하여 doblock을 구문 분석하지 않고 모든 클래스 이름에 메타데이터를 추가할 수도 있습니다.
PHP 7.4까지 클래스 선언에 메타데이터를 추가하는 유일한 방법은 문서 주석을 통해서였습니다. 새로운 속성 V2 RFC를 통해 PHP는 속성을 구조화된 구문 메타데이터로 정의하여 개발자가 유형, 함수, 속성, 메서드, 매개변수 및 상수 선언에 추가하는 데 사용할 수 있습니다.
이제 개발자는 docblock 주석 앞이나 뒤에 속성을 추가하고 그 중 하나 이상에 하나 이상의 연관된 값을 가질 수 있습니다.
매치 식 V2
"스위치 표현식"에 익숙한 사용자는 이미 일치 표현식이 무엇인지 알고 있습니다. 일치 표현식만 "switch"의 더 나은 버전입니다.
예를 들어 개발자가 값을 한 번만 반환할 수 있는 더 안전한 의미 체계를 제공합니다. 값을 '중단'하지 않고 조건을 결합할 수도 있습니다. 또한 유형 강제 변환을 수행하지 않고 엄격한 유형 비교를 사용합니다.
생성자 부동산 프로모션
이 RFC는 생성자와 매개 변수 정의를 병합하는 것을 목표로 하는 속성 선언을 단순화하는 데 도움이 되는 보다 간결한 구문을 도입합니다. 이제 개발자는 덜 중복되고 더 짧게 만들어서 속성 또는 매개 변수를 더 잘 선언할 수 있습니다. 또한 이 RFC를 통해 개발자는 값 개체에 대해 작성하는 상용구 코드를 줄일 수 있습니다.
Saner 문자열 대 숫자 비교
PHP 8.0은 이 RFC를 제공하여 숫자 문자열 비교를 보다 합리적으로 만듭니다. 이전에 이러한 작업을 수행하기 위해 PHP는 먼저 문자열을 숫자로 변환한 다음 정수 또는 부동 소수점 간의 비교를 수행했습니다. 이 방법은 여러 가지 면에서 도움이 되었지만 사이트 기능 및 보안 관련 측면에서 치명적인 오류를 유발할 수 있습니다.
언급했듯이 이 RFC는 문자열 대 숫자 비교를 보다 합리적인 동작으로 제공하는 것을 목표로 합니다. 숫자 문자열과 비교할 때 숫자 비교를 사용하거나 숫자를 문자열로 변환하고 문자열 비교를 사용합니다.
내부 함수에 대한 일관된 유형 오류
잘못된 형식 매개 변수를 전달할 때 내부 및 사용자 정의 함수는 다르게 동작합니다. 내부 함수는 사용자 정의 함수와 같이 "TypeError"를 발생시키지 않습니다. 대신 경고를 내보내고 "null"로 반환합니다.
PHP 8.0은 매개변수 유형이 일치하지 않는 경우 내부 매개변수 구문 분석 API가 "ThrowError"를 생성하도록 하는 RFC를 제안하여 이러한 불일치를 해결합니다. 이로 인해 모든 내부 기능 동작이 더 일관됩니다.
새로운 클래스, 인터페이스 및 함수
주목할만한 새로운 PHP 8.0 변경 사항 중에는 WeakMap 클래스가 있습니다. 일반적으로 약한 맵은 약하게 참조된 키가 있는 데이터 또는 객체의 모음입니다. 데이터를 약하게 참조한다는 것은 데이터가 파괴되는 것을 막을 방법이 없다는 것을 의미하며, 그 결과 성능이 저하되고 메모리 누수가 발생합니다.
PHP 7.4는 데이터가 파괴되는 것을 막지 않는 데이터에 대한 참조를 유지하기 위해 약한 참조를 지원합니다. 그러나 원시의 약한 참조는 자체로 제한됩니다.
반면에 약한 맵은 실제로 훨씬 더 일반적입니다. 그러나 PHP 약한 참조 위에 효율적인 약한 맵을 구현하는 것은 불가능합니다. PHP 8.0의 WeakMap 클래스를 사용하면 개발자가 바로 그렇게 할 수 있습니다. 그들은 개발자나 프로그램이 파괴할 수 있는 약한 맵 키로 객체를 생성할 수 있습니다. 즉, PHP는 이러한 객체를 오랫동안 참조하지 않으면 쓰레기로 간주하고 수집합니다.
많은 유용한 새로운 PHP 8.0 기능에 대한 또 다른 추가 기능은 Stringable 인터페이스입니다. 이 RFC는 "__toString()" 메서드를 구현하는 모든 클래스에 이 함수를 자동으로 추가합니다. 이는 개발자가 클래스가 코드를 구현할 때마다 인터페이스를 수동으로 인코딩할 필요가 없음을 의미합니다.
이전 버전의 PHP에서 "strstr" 및 "strpos"는 개발자가 문자열 내부에서 바늘을 찾는 표준 옵션이었습니다. 안타깝게도 많은 사람들이 두 기능이 충분히 직관적이지 않고 초보 PHP 개발자에게 혼란스러울 수 있다고 생각했습니다. 이제 새로운 "str_contains" 함수를 사용하여 문자열 내부를 보다 쉽게 검색할 수 있습니다.
str_contains 외에도 PHP 8.0은 "str_starts_with()" 및 "str_ends_with()"를 제공하여 문자열 내에서 더 나은 바늘 검색을 돕습니다.
다른 새로운 기능에는 "fdiv()", "get_debug_type()", "get resource_id()", "token_get_all()" 객체 구현, DOM 순회 및 조작 API가 포함됩니다.
유형 시스템 및 오류 처리
PHP 8.0은 또한 다양한 시스템 및 오류 처리 개선 사항을 제공합니다. 그 중 하나가 혼합형입니다. "혼합 유형"은 코드에서 누락된 유형을 방지하는 데 도움이 됩니다. PHP에서 누락된 유형은 함수가 null, 여러 유형 중 하나 또는 유형 힌트를 사용할 수 없는 유형을 반환함을 의미할 수 있습니다.
일반적으로 "혼합"은 배열, 부울, 호출 가능, int, float, null, 개체, 리소스 및 문자열을 의미할 수 있습니다. 새로운 혼합 유형을 통해 개발자는 매개변수, 클래스 속성 및 함수 반환에 유형을 추가할 수 있습니다. 이렇게 하면 형식 정보가 잊혀진 것이 아니라 더 정확하게 지정되었음을 나타내는 데 도움이 됩니다.
PHP 8.0의 또 다른 주목할만한 개선 사항은 정적 반환 유형입니다. PHP 8.0 이전에는 "self"는 반환할 수 있었지만 "static"은 반환할 수 없었습니다. 이제 PHP의 동적 유형 특성을 통해 개발자는 이 기능이 매우 유용하다는 것을 알게 될 것입니다.
PHP가 제공하는 기타 유형 시스템 및 오류 처리 개선 사항에는 추상 특성 메서드 유효성 검사, 매직 메서드의 올바른 서명, 개인 메서드를 사용한 상속 및 재분류된 엔진 경고가 포함됩니다. 또한 Curl, Gd, Sockets, OpenSSL, XMLWriter 및 XML 확장에 대한 리소스 대신 호환되지 않는 메서드 서명 및 불투명 개체에 대한 치명적인 오류가 있습니다.
기타 구문 업데이트
PHP 8.0은 또한 많은 구문 개선 사항을 제공합니다. 예를 들어 개발자는 이제 명령문 대신 표현식으로 "throw"를 사용할 수 있으므로 다른 위치에서 예외를 던질 수 있습니다.
또한 PHP 8.0에는 프로그램 변수 구문의 여러 불일치를 해결하는 데 도움이 되는 변수 구문 RFC도 있습니다. 이 RFC를 통해 개발자는 이제 간과된 작은 사례를 처리할 수 있습니다.
또한 PHP 8.0은 비캡처 캐치도 제공합니다. 업데이트 전에 개발자는 예외를 포착하려는 경우 변수에 예외를 저장했습니다. 캡처하지 않는 catch를 사용하면 변수를 생략할 수 있습니다.
또한 개발자는 이제 네임스페이스 이름을 단일 토큰으로 취급하고 개체에 "::class"를 허용할 수 있습니다. 또한 매개변수 목록의 후행 쉼표와 클로저 사용 목록 RFC를 허용합니다.
새로운 PHP가 WordPress 사이트에 미치는 영향
현재 WordPress는 PHP 버전 7.4, 8.0 및 8.1을 지원합니다. 불행히도 일부 사용자는 새 버전이 좋아하는 테마 및 플러그인과 호환되지 않기 때문에 업그레이드를 꺼립니다.
한편 호환성 문제는 5.9 및 6.0과 같은 최신 WordPress 버전을 사용하지 않는 경우에만 발생합니다. 일부는 레거시 또는 구식 소프트웨어로 작업하는 것을 선호하여 최신 PHP 버전으로 업그레이드할 수 없기 때문에 그렇게 하지 않는 것을 선호합니다. 이 때문에 개발 과정에서 더 많은 문제에 직면하는 경향이 있습니다.
반면에 WordPress 사이트에서 최신 버전의 PHP를 사용해 본 개발자는 새로운 기능과 개선 사항 덕분에 개발이 더 쉽고 쉬워졌습니다. PHP 8.0 및 8.1은 뛰어난 오류 처리 및 최적화를 제공합니다. 또한 8.1은 향후 몇 년 동안 적극적인 지원 및 보안 업데이트를 제공할 계획입니다.
PHP 업데이트를 위한 WordPress 사이트 준비
언급한 바와 같이 PHP 8.0에는 이전 WordPress 버전과의 특정 호환성 문제가 있습니다. 원활한 개발 환경을 위해 사이트를 버전 5.9 또는 6.0으로 업데이트하여 새로운 PHP 기능을 지원하는 것이 가장 좋습니다.
WordPress 사이트를 최신 버전으로 업그레이드하는 것이 꺼려지는 경우 온라인에서 다양한 도구를 사용하여 먼저 테스트하여 오류 없이 진행할 수 있는지 확인할 수 있습니다. 또한 새 PHP 8.0에 맞게 사이트를 구성하기 전에 먼저 사이트를 복제하여 오류로 인한 데이터 손실을 방지하는 것이 가장 좋습니다. 그런 다음 최신 PHP 버전에서 테스트하여 호환되는지 확인하십시오.
특정 테마 및 플러그인이 PHP 8.0에서 작동하지 않는 경우 최신 버전으로 업데이트해야 합니다. 이전 PHP로 돌아가는 대신 테마 또는 플러그인 지원 팀에 연락하여 호환성 문제를 알리십시오. 그들은 PHP 8.0 및 PHP 8.1과 원활하게 작동할 수 있도록 사이트의 기능을 업데이트해야 합니다.
WordPress 사이트 강화
현대 기술이 빠르게 발전함에 따라 보다 경쟁력 있고 고성능 사이트에 대한 수요가 계속 증가하고 있습니다. 즉, 새로운 트렌드에 적응하는 것을 꺼리면 사이트가 뒤쳐질 수 있습니다.
오늘날 프로그래밍 언어 PHP는 버전 8.0 및 8.1 덕분에 개발자가 이전보다 더 나은 코드를 작성하는 데 도움이 되는 새로운 기능을 제공합니다. 오늘날의 새로운 기능은 이미 개발자에게 많은 것을 제공하지만 PHP는 미래의 웹사이트에 더 많은 것을 약속합니다.