2014-04-17 3 views
0

여러 소스에서 데이터를로드하는 제품 검색 페이지가 있습니다. 속도 최적화를 위해 페이지의 맨 위에는 ob_start()를, 하단에는 ob_end_flush()를 배치하여 모든 출력을 버퍼링 한 다음 인쇄했습니다. 하지만 이렇게하면 페이지로드가 느려집니다. 그것은 실제 페이지로드 시간에 약 0.3 초를 추가합니다.PHP 출력 버퍼링 기능으로 인해 페이지로드가 더 느려짐

왜 이런 일이 발생하는지 알고 싶습니다.

답변

1

왜 이것이 처음부터 빠르게 진행될 것으로 기대하십니까?

출력 버퍼링 콘텐츠가 클라이언트로 전송되지 않도록합니다. ob_end_flush으로 풀 때까지 모든 것을 되돌려 놓습니다. 버퍼링하지 않으면 콘텐츠를 출력하자마자 즉시 콘텐츠가 클라이언트로 전송됩니다. 물론 출력 버퍼링은 정의에 따라 콘텐츠 전송을 지연시킵니다.

+0

그러나 일부 포럼에서 클라이언트 브라우저가 느린 경우 데이터 수신을 지연하고 모든 데이터가 수신 될 때까지 연결을 열어야하므로 데이터 전송 속도가 전반적인 연결 속도를 높일 수 있다고 읽었습니다 . 틀렸어? 나는 너의 친절한 대답을 고맙다. 고맙습니다. – mim

+0

나에게 의미가 거의 없습니다. 그것에 대해 생각해보십시오. 버퍼링을하지 않으면 PHP는 즉시 데이터를 Apache로 전달할 것이며 Apache는 가능한 한 빨리 클라이언트에 데이터를 전송할 수 있습니다. 버퍼링과 함께 PHP는 모든 데이터를 메모리에 저장하고 아파치는 아무 것도하지 않는 동안 더 많은 리소스를 사용한다. 갑자기 PHP가 아파치의 모든 것을 덤프하고 클라이언트에게 데이터를 보내기 시작합니다. 아파치와 클라이언트가 아무 것도하지 않고 PHP가 메모리를 가득 채우는 동안 분명히 지연이 있습니다. – deceze

+0

나는 당신이 옳다는 것을 추측한다. 고맙습니다. – mim