문제

나는 많은 것을 보았다 ob_get_clean() 마지막으로. 일반적으로 나는했다 $test .= 'test'

나는 하나가 다른 것보다 더 빠르고/또는 더 나은지 궁금합니다.

다음은 사용하는 코드입니다 ob_get_clean():

ob_start();

foreach($items as $item) {
    echo '<div>' . $item . '</div>';
}

$test = ob_get_clean();

다음은 사용하는 코드입니다 $test .= 'test':

$test = '';

foreach($items as $item) {
    $test .= '<div>' . $item . '</div>';
}

어떤게 더 좋아?

도움이 되었습니까?

해결책

출력 버퍼에는 전역 변수의 모든 함정이 있습니다. 당신은 모든 실행 경로를 알고 있어야합니다. ob_start() ~로 ob_get_clean(). 당신은 그것이 거기에 도착할 것이고, 그 사이에 열린 버퍼가 닫혔을 것입니까? 코드는 예외를 던질 수 있습니다. 다음 사람이 추적하는 것은 정말 재미있는 버그 일 수 있습니다.

반면에, 나는 그것을 언급하기도 싫어한다. 그것이 여전히 사실인지 확실하지 않습니다.

다른 팁

결과는 동일하며 성능 차이가 무시할 수 있다고 생각합니다. 기본적으로 개인 스타일 선호도의 문제. 나는 연결을 직접 갈 것입니다 - 나는 연결이 옵션이 아닌 경우에만 출력 버퍼링을 사용합니다.

또한 OB_GET_CONTENTS () 및 OB_CLEAN ()을 모두 실행하는 대신 한 번에 두 가지를 수행하는 OB_GET_CLEAN ()을 실행합니다.

문자열 연결의 오버 헤드에 대해 우려하는 경우 다음과 같은 점에 유의해야합니다.

에코 'u003Cdiv> '. $ test.'u003C/div> ';;

이보다 측정 값이 느립니다.

에코 'u003Cdiv> ', $ test,'u003C/div> ';;

첫 번째는 2 개의 문자열 컨택트와 에코가 이어지고, 두 번째는 3 개의 에코로 컴파일되며, 실제로는 더 빠릅니다.

대규모 문자열을 사용할 때 출력 버퍼링을 사용하면 성능이 작은 이점이있을 수 있다고 생각하지만, 일반적으로 사용하기 위해이 코드는 다른 사람들이 이해하고 디버깅하기가 더 쉽기 때문에 제 의견에 동의하는 것이 좋습니다.

작은 지점이지만 출력 버퍼링 방식을 사용하려면 완전히 사용할 수도 있습니다.

ob_start();

foreach($items as $item) {
    echo '<div>';
    echo $item;
    echo '</div>';
}

$test = ob_get_clean();

위에서 언급했듯이 출력 버퍼링은 성능에 더 좋습니다. 큰 문자열의 경우 성능 차이는 전혀 무시할 수 없습니다. PHP의 출력 버퍼링을 Java의 StringBuffer/StringBuilder와 비교할 수 있습니다. 문자열 연결의 경우 전체 문자열을 매번 메모리로 복사해야합니다. 출력 버퍼링의 경우 텍스트는 합리적으로 증가하는 버퍼로 들어가며 각 출력에 대한 데이터를 복사 할 필요가 없습니다.

인라인 HTML을 사용하는 것에 대해 생각할 수도 있습니다 (더 빨리). 인라인 HTML에 대한 추가 이점은 HTML이 HTML에서 HTML에서 구문 강조 표시를 수행 할 수 있다는 것입니다. 수정 된 코드 (short_open_tags = on 필수) :

ob_start();
?>

<? foreach($items as $item) { ?>
    <div><?= $item ?></div>
<? } ?>

<?
$test = ob_get_clean();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top