문제

PHP에서 HTML을 출력하는 다양한 방법에 대한 질문; 이들 사이의 성능 차이는 무엇입니까?

방법 1- 가변 연결

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;

방법 2- 출력 버퍼링

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';

변수를 지속적으로 수정하고 확대함으로써 성능을 얻는 것으로 생각됩니다. 그 맞습니까?

건배!

Garyf에게 감사하지만 건축에 대한 답을 원하지 않습니다.이 질문은 성능에 관한 것입니다. 어느 것이 더 빠른지에 대한 다른 의견 / 테스트가있는 것처럼 보이므로 아직 받아 들여지는 답변이 없습니다.

도움이 되었습니까?

해결책

조금 오래되었지만 이 게시물 Sara Golemon은 아마도 도움이 될 것입니다. afaik 출력 버퍼링 기능은 매우 빠르고 효율적이며 echo, 그것이 제가 사용할 것입니다.

다른 팁

문자열 연결 자체를 제쳐두고, 당신은 실제로 웹 페이지를 만들어야하는 방법을 묻습니다. 그리고 어떤 형태의 명시적인 동의가 아마도 잘못된 일이라고 생각합니다.

사용해보십시오 모델 뷰 제어 패턴 데이터를 구축하고 간단한 템플릿 라이브러리로 전달하려면 ( 똑똑합니다), 그리고 당신의 시야를 만드는 방법에 대해 걱정하십시오.

더 나은 분리, 더 적은 우려.

일반적으로 메소드 #1을 사용하므로 HTML을 정적 HTML을 포함하는 템플릿 파일의 어느 곳에도 넣을 수 있습니다. 나는 PHP에서 많은 HMTL을 유지하려고 노력합니다. 템플릿은 일반적으로 별도의 파일이므로 훨씬 깨끗하고 짧은 PHP를 만듭니다.

속도/성능과 관련하여 차이가 매우 미미할 것이라고 생각합니다. 출력 버퍼링을 사용하면 변수에 액세스 할 수는 없지만 항상 변수를 확대하고 있지만 어딘가에 저장해야합니다.

나는 종종 열려 있고 폐쇄되는지 궁금했다 <?php 단지 내부에 넣는 것보다 느립니다 <?php 그런 다음 한 번에 모두 반향을 일으 킵니다.

결국 우리는 매우 복잡한 스크립트로 밀리 초에 말하고 있다고 생각합니다.

오 예, 방법 #1은 가능한 한 훨씬 더 유연합니다. echo $html; 어딘가에.

변수를 지속적으로 수정하고 그것을 재판하는 데 약간의 오버 헤드가 있다는 것은 사실입니다. 하지만, ~ 아니다 이를 수행한다는 것은 어느 시점에서 스크립트가 실행을 끝내고 (중단 또는 이와 유사하기 때문에) 순차적 에코 진술은 아무것도 아닌 페이지를 부분적으로 인쇄 할 수 있음을 의미합니다.

PHP 문자열이 어떻게 변하는 지 (C 또는 C#과 같은 불변의 현에 반대)에 대한 긴 답변을 입력하려고했지만 링크 한 것 같습니다. 내가 만난 오래된 게시물. 나는 기본적으로 StringBuilder를 사용하는 Java 및 C# 솔루션과 관련하여 당신이 요구하는 것을 다룹니다.

Sidenote : StringBuilder 솔루션은 (테스트되지 않은)과 유사합니다.

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);

몇 가지 생각 :

  • 출력 버퍼링은 전체 스크립트가 실행될 때까지 사용자가 아무것도 볼 수 없기 때문에 페이지가 느리게 보이게 할 수 있습니다 ( #1을 설정하는 방식은 동일하게 유지됩니다).

  • PHP의 문자열은 돌연변이 가능하므로 연결은 다른 언어만큼 나쁘지 않습니다. 즉, 입력에 할당 된 공간이 기본적으로 상당히 크기 때문에 출력 버퍼링이 약간 더 빠를 수 있습니다 (40k에 따라 40k. 이것)

결국 나는 그것이 실제로 스타일의 문제라고 말합니다. 출력 버퍼링이 당신을 사는 것을 좋아한다면 아마도 갈 길입니다.

귀하의 질문에 대한 답변은 여기에서도 찾을 수 있습니다. php : output [] w/ join vs $ output. =

문자열 연결은 줄을 만드는 가장 빠른 방법입니다.

나는 "echo"대 스트링 빌딩을 테스트하지 않았지만, 버퍼링 된 출력 에코를 사용하지 않는 한, 자체 플러싱 버퍼에 대한 순차적 쓰기로 인해 가장 빠른 Echo가 가장 빠릅니다. (플러시 속도 속도가 느리게 진행되며, 사전에 문자열 코팅을하더라도 실제로 피할 수는 없습니다).

내가 언급하지 않은 것은 일반적으로 PHP 담당자가 HTML을 클래스하거나 스타일을 다른 방식으로 추가 해야하는 디자인 사람들과 협력해야한다는 것입니다. 따라서 솔루션은이를 염두에 두어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top