웹 사이트에서 웹 컨텐츠를 제공하는 것이 목적 인 일부 PHP 스크립트의 실행 시간을 테스트하고 있습니다.웹 컨텐츠를 제공하는 PHP 스크립트의 실행 시간 측정
그러나 일관성없는 결과가 나타납니다.
실행 시간이 측정되고 텍스트 파일에 기록됩니다.
스크립트 중 하나는 기본적으로 디스크에서 jpeg 이미지를 읽고이를 클라이언트에 제공합니다. 여기
는 관련 코드와 스크립트의 단순화 된 버전입니다 : 제공<?php
// save initial time
$t1 = microtime(true);
// set header for a jpeg image
header('Content-Type: image/jpeg');
// read a file from the hard drive and send content
// (the real code serves every time a different image based on the request)
readfile('the_image.jpg');
// flush output buffer
flush();
ob_flush();
// save final time
$t2 = microtime(true);
// elapsed time in milliseconds
$te = round(($t2 - $t1) * 1000);
// write a line to the log file
$handle = fopen('log.txt', 'a');
fwrite($handle, $te . "\n");
fclose($handle);
이미지는 다른 때마다 있습니다. 크기는 약 100KB입니다.
원격 위치에서 웹 사이트에 연결하고 일부 이미지를로드합니다.
내가 밀리 초 단위로 로그 파일의 실행 시간을 보는 PHP 스크립트는 데이터를 보낼 때 것을 (넣어 아마 나는이에 틀렸다) 내가 기대했던이
45
63
40
3
3
67
40
3
5
처럼 보인다 클라이언트 실행은 데이터가 전송 될 때까지 대기합니다.
따라서 위의 코드에서 이미지가 클라이언트로 완전히 전송되면 $t2
이 검색됩니다.
왜 이미지가 전송되는 데 3ms 밖에 걸리지 않는 이유는 무엇입니까? 서버에 연결할 때 인터넷 연결을 사용할 경우 3ms를 달성 할 수 없습니다.
PHP가 모든 데이터를 즉시 웹 서버로 보냅니다 (내 경우에는 nginx). 그러면 후자가 클라이언트에 데이터를 전송하는 데 시간이 걸립니다.
업데이트
그것은 문제가 버퍼링을 수행 nginx를 관련이 보인다.
이런 일이 발생하면 nginx은 가능한 한 빨리 PHP의 출력 버퍼를 "먹고"다음 클라이언트에 내용을 보냅니다.
이렇게하면 PHP 인스턴스를 더 빨리 닫을 수 있습니다.
PHP 스크립트는 콘텐츠를 클라이언트로 전송하는 데 필요한 시간을 확인하지 않습니다.
비활성화 할 수있는 방법이없는 것 같습니다. nginx 버퍼링. 나는 많은 "조리법"을 주변에서 인터넷 검색하지만 아무도 작동 발견했습니다.