웹사이트에 새로운 상수를 추가해야 해서 로컬 config.php 파일을 열고 정의 성능을 향상시키기 위해 몇 년 전에 테스트했던 hidef 및 apc 솔루션이 생각났습니다.
내 프로그램에는 개발, 테스트 및 프로덕션 서버에 대한 구성이 다릅니다. 상수의 경우 배열을 사용하여 정의해야 하는 모든 상수를 정의한 다음 apc_load_constants 함수가 있는지 감지합니다. 일괄적으로. apc를 사용할 때 상수를 추가할 때마다 $key를 수정해야 적용됩니다.
이제 테스트 및 프로덕션 서버 PHP가 5.4로 업그레이드되었으므로 opcode 캐시는 Zend opcache를 사용하며 APC는 더 이상 설치되지 않습니다. apc 사용자 캐시를 사용하기 때문에 apcu를 추가로 설치했는데, 사용법은 apc와 완전히 똑같기 때문에 프로그램을 전혀 변경할 필요가 없습니다. 하지만 apcu는 apc_load_constants, apc_define_constants를 지원하지 않으므로 apc 솔루션을 사용할 수 없습니다. 공식 홈페이지에 가서 2012년 7월 12일에 출시된 stable 버전인 hidef 0.1.13의 최신 버전을 설치했는데, 벌써 1년이 넘었습니다.
정의 시간을 테스트하기 위해 간단한 프로그램을 작성했는데, 1000회 실행하는데 약 2.8ms가 걸립니다. 따라서 중간 규모 웹 사이트(예: PHP가 하루에 천만 번 실행됨)의 경우 페이지당 25개의 상수가 정의되면 하루에 약 10000000*25/1000*2.8=700000ms, 즉 700초가 소요됩니다. hidef를 사용하면 하루에 거의 700초의 PHP 실행 시간을 절약할 수 있습니다.
읽기 성능을 살펴보겠습니다. 테스트에서는 1w번씩 상수로 읽는데, 값은 모두 1로 각각 37ms와 0.7ms입니다. 그러니까 하루에 천만 번, 페이지당 평균 20개의 상수를 사용하면 740초가 걸리고, hidef를 사용하면 14초, 뭐 또 700초 이상이 걸립니다.
하루에 1,400초의 PHP 실행 시간을 절약하는 것은 중요하지 않을 수 있지만 항상 좋으며 시도해 볼 가치가 있습니다. 결국 매개 변수를 변경할 가능성은 매우 적습니다.
정의 매개변수를 수정해야 하는 경우 구성 파일을 수정한 다음 php-fpm을 다시 로드하면 됩니다.
hidef의 구체적인 설치 방법은 다음을 참조하세요. 정의 성능을 향상시키는 PHP 확장 프로그램인 hidef 설치 및 사용
바이두에서 "hidef"를 검색했더니 3위가 제 블로그 글을 복사한 사이트네요:( 그리고 제가 직접 퍼블리싱한 php 확장자 hidef를 설치해서 사용하는 define 성능 향상 페이지를 찾을 수 없습니다. Baidu는 원본 콘텐츠를 식별하는 데 일부 오류가 있는 것 같습니다.
Baidu에서 "hidef php"를 검색하면 해당 웹사이트가 1위, 두 번째가 공식 웹사이트, 내 사이트가 3위를 차지했습니다.
gg는 첫 번째 공식 웹사이트인 "hidef php"를 검색하고, 세 번째는 또 다른 원본 기사이고, 내 기사는 네 번째에 있습니다. gg 인지도 꽤 좋아요!
360에 "hidef php"를 검색하면 복사사이트가 첫번째, 내것이 두번째, 또 다른 원문이 세번째입니다.
따라서 이 기사의 탄생과 함께 첫 번째 기사나 이 기사의 순위를 매기는 데 도움이 될 수 있는지 살펴보겠습니다.
원래 구성 상수의 프로그램 샘플 코드가 첨부되어 있습니다.
}
} else {
함수 정의 배열($key, $arr, $case_sensitive = false) {
foreach ($arr as $name => $value) {
~ >
}
}
}
'HX' => 1,
'BLOG_URL' => 'http://www.jb51.net/',
'WWW_URL' => 'http://www.jb51.net/',
);
속도 정의를 테스트하기 위한 코드가 첨부되어 있습니다.
$t1 = 마이크로타임(1);
$상수 = 배열(
>
'hx2' => '2',
>
>
'hx5' => '5',
'hx6' => '6',
>
'hx8' => '8',
'hx9' =>
'hx10' => '10',
);
함수 정의 배열($key, $arr) {
foreach ($arr as $name => $value) {
정의($name.$i, $value);
}
}
for($i=0;$i<100;$i ) {
정의 배열($i,$constants);
}
$t2 = 마이크로타임(1);
에코($t2-$t1)*1000;
//낭독공연
$t1 = 마이크로타임(1);
for($i=0;$i<10000;$i ) {
$t = hx1;
$t2 = 마이크로타임(1);
echo ' '.($t2-$t1)*1000;
$t1 = 마이크로타임(1);
for($i=0;$i<10000;$i ) {
$t = HX;
}
echo ' '.($t2-$t1)*1000;