일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바스크립트
- 킹북이초월
- 보르비스초월
- ConoHa
- 아파치
- 알리익스프레스
- OpenWrt
- 리눅스
- centos
- mysql
- 라즈베리파이2
- 램가스초월
- PHP-FPM
- KB증권
- 소비전력
- Apache
- 스톤에이지
- 윈도우10
- proxmox
- Rocky
- SKT
- jQuery
- 가상서버호스팅
- 알뜰폰
- 티스토리
- iptime
- 복현오거리
- KB국민카드
- 시놀로지
- php
- Today
- Total
맛집 여행 캠핑 일상 생활
PHP fread vs readfile vs fpassthru 속도 비교 본문
PHP fread vs readfile vs fpassthru 속도 비교
비교해 보기 위해서 아래와 같이 함수를 만들고 테스트를 진행하였습니다.
테스트에 사용된 이미지는 3,995,958 바이트 jpg 입니다. 해상도는 2000 x 1437
function image_view1($img_path) {
$IMAGE_PATH = $img_path;
$IMAGE_SIZE = getimagesize($IMAGE_PATH);
$fp = fopen($IMAGE_PATH,"rb");
while(!feof($fp)) {
$iraw .= fread($fp,8192);
}
fclose($fp);
echo "<img src='data:".$IMAGE_SIZE['mime'].";base64,".base64_encode($iraw)."'>";
}
function image_view2($img_path) {
$IMAGE_PATH = $img_path;
$IMAGE_SIZE = getimagesize($IMAGE_PATH);
ob_start();
readfile($IMAGE_PATH);
$iraw = ob_get_clean();
echo "<img src='data:".$IMAGE_SIZE['mime'].";base64,".base64_encode($iraw)."'>";
}
function image_view3($img_path) {
$IMAGE_PATH = $img_path;
$IMAGE_SIZE = getimagesize($IMAGE_PATH);
ob_start();
$fp = fopen($IMAGE_PATH,"rb");
if($fp) fpassthru($fp);
fclose($fp);
$iraw = ob_get_clean();
echo "<img src='data:".$IMAGE_SIZE['mime'].";base64,".base64_encode($iraw)."'>";
}
아래는 테스트를 진행한 코드입니다. ( 각각 테스트 )
$st = microtime(true);
for($i=0; $i<10; $i++) image_view1($_POST['url']);
$et = microtime(true);
printf("Loading time 1 : %0.4f", $et - $st);
$st = microtime(true);
for($i=0; $i<10; $i++) image_view2($_POST['url']);
$et = microtime(true);
printf("Loading time 2 : %0.4f", $et - $st);
$st = microtime(true);
for($i=0; $i<10; $i++) image_view3($_POST['url']);
$et = microtime(true);
printf("Loading time 3 : %0.4f", $et - $st);
각 함수별로 두번씩 테스트한 결과입니다.
Loading time 1 : 18.7244
Loading time 1 : 18.5084
Loading time 2 : 18.9206
Loading time 2 : 19.0508
Loading time 3 : 18.6121
Loading time 3 : 18.5669
평균이랄 것도 없지만 fpassthru 가 아주 미세하게 조금 더 빠르고 다음이 fread, 제일 느린게 readfile 이였습니다.
속도 차이가 그렇게 크지 않아서 별 의미는 없겠지만, 가급적이면 fpassthru 와 fread 를 사용하는게 좋을 것 같다는 결론입니다.
대신에 fread 는 버퍼를 8k 로 해야 저 속도지 4096 으로 하면 좀 더 느린 결과를 보입니다.
테스트 환경 및 이미지 파일에 따라 결과는 달라질 수도 있을 겁니다.
ps : 576,054 바이트 bmp 파일로 테스트한 결과
for 문을 20으로 바꿔서 테스트 하였음.
Loading time 1 : 0.8390
Loading time 2 : 0.7939
Loading time 3 : 0.7502
php 버전 : PHP 5.3.3
'LAMP' 카테고리의 다른 글
PHP mysqldump 받아서 다운로드 하는 방법 (0) | 2016.10.21 |
---|---|
PHP 한글파일(hwp) 다운로드시 브라우저에서 열리는 문제 (0) | 2016.10.20 |
크롬브라우저 Content-Disposition: inline bmp 이미지 문제 (0) | 2016.09.07 |
PHP 실행시간 체크 방법 (0) | 2016.09.05 |
PHP 이미지 다운로드 또는 바로보기 (0) | 2016.09.02 |