커뮤니티토픽게시판

고등학생에게는 수행평가의 철인 6월입니다..

 

오늘도 어김없이 웹서핑을 하다가 갑자기 생각이나서 구글에 끄적여 보다가 갑자기 궁금해져서 이야기를 나눠보고 싶네요

 

PHP 하면 듣는 소리가 1차적으로 철지난 오래된 언어, 2차적으로 느린 언어라는 말이 있을겁니다

대규모 프로젝트가 아니면 느끼기 힘드나 벤치마크를 보면 node.js 같은 언어와 속도차이가 엄청나더군요

물론 구조적인 문제나 나온 연도를 보면 그럴만 하지만 그렇다고 중요한 속도 차이를 빼놓고 말하기는 좀 그렇죠..

열심히 마우스를 움직이는 사이에 갑자기 생각난게 HHVM vs PHP가 생각나서 찾아보다 보니 JIT라는 기능이 있더군요

 

또 PHP 7.4에서 JIT(Just In Time) 이라는 기능이 추가된다고 하네요 (이번년도 말쯤 출시 예정이라고 합니다)

저는 PHP 8에서 추가될줄 알고있었는데 이번 년도 이내로 희망을 볼수 있을것 같네요

 

제가 이해한게 맞다면 기존 PHP는 php파일 전체를 컴파일 하고 이를 실행하는 형식이였는데, JIT를 적용하면 그 코드가 호출 될때마다 컴파일을 즉석에서 해주기 때문에 효율적이다.. 라는 말인거 같아요

제 머리로는 컴파일이 잦아지면 속도가 느려질거 같기는 하지만 제가 모르는 무언가가 있는거 같습니다

HHVM이 JIT가 적용된것인데 php 5.6하고는 속도가 비교가 안될정도로 빠르다고 하더라고요

물론 PHP 7로 넘어오면서 다시 회복했기는 했지만요

 

그건 그렇다고 치는데 과연 이게 라이믹스(XE)에서도 효과가 있을지가 궁금합니다

라이믹스가 한 페이지를 표시하는데도 엄청 많은 php 파일들을 불러오는데, 이 파일들 중에서도 안쓰는 함수나 클래스들이 많을테니 속도 개선이 많을거 같기도 한데, 어차피 큰 단위(class)로 묶어야 변수같은 오류가 안날테니 거의 모든게 클래스로 이루어져있는 라이믹스에서 큰 효과가 있을지도 의문이기도 하네요 ㅋㅋ

 

분명히 속도 증가에는 효과가 있을거 같은데 효과가 클지 작을지는 잘 모르겠네요

그냥 갑자기 든 생각을 끄적여 봅니다 ㅋㅋ

글쓴이 리버스

profile
모듈 제작하는 고등학생 리버스입니다!

길드 모듈 판매중입니다~
https://xetown.com/thirdparties/1387146
  • ?
    PHP가 아직 JIT를 지원안하고 있었군요... 살짝 놀랐습니다. 자바스크립트같은 경우 진작에 JIT를 지원하고 있었을텐데... PHP정도의 메이저 언어면 당연히 하고 있는줄 알았거든요.
    PHP 7.4에서 JIT 지원의 의미는 앞으로 native 기계어로 된 코드를 최종 실행하게 된다는 의미입니다.
    지금의 PHP는 내부적인 컴파일 과정을 거치더라도 최종결과물이 바이너리가 아니라 자체적인 바이트코드라서 실제로는 그 코드를 돌리는 과정에서 다시 한번의 해석과정을 거치게 되거든요.
    보통 스크립트 언어에 JIT가 적용되면 속도가 극적으로 빨라지는데... PHP가 아직 이렇게 빨라질 여유가 남아있었다니 놀랍네요...
  • profile

    안 쓰는 함수나 클래스를 단지 로딩하기만 하는 것으로는 성능에 영향을 주지 않게 된 지는 이미 한참 됐습니다. PHP 5.5부터 적용된 opcache 덕분에 소스파일을 매번 해석하지 않고 한 번 바이트코드로 변환한 결과를 메모리에 적재해 놓으니까요. 이후에는 실제 호출되는 함수에 해당하는 바이트코드만 실행합니다. 매우 복잡한 구조의 네임스페이스와 클래스를 사용하는 모던PHP 라이브러리들이 그나마 잘 돌아가는 것은 모두 opcache 덕분입니다.

     

    JIT를 적용한다면 이 바이트코드를 다시 한 번 기계어로 변환한다는 얘기겠지요? 아마 PHP 5에서 7로 넘어오는 정도의 성능 향상을 기대할 수 있을 듯 하지만, PHP 7처럼 대부분의 코드를 일괄적으로 빠르게 해주지는 않을 수도 있습니다. 특히 자료형을 선언하지 않고 대강 뭉뚱그려 쓰거나, 자료형을 자동으로 변환해 주어야 하는 코드는 JIT에서 쥐약입니다. if($var == 0)과 if($var === 0)의 속도 차이가 극단적으로 벌어질지도 모릅니다. PHP 7에서 도입된 scalar type hinting과 return type hinting을 적극 활용하여 깔끔하게 작성된 코드일수록 성능 개선 효과가 좋겠지요.

     

    물론 대부분의 웹앱은 DB에서 데이터를 가져와서 뿌려주는 역할에 불과하기 때문에, 인터프리터 속도가 아무리 빨라져도 실제 TTFB에는 큰 차이가 나지 않을 수도 있습니다. 정작 성능 개선으로 가장 큰 효과를 볼 수 있는 대규모 사이트들은 PHP 7 적용 후 opcache에 버그가 많아져서 호되게 당했습니다 ㅠㅠ JIT도 제대로 안정화될 때까지는 방관할 예정입니다.