Pregunta

Una pregunta acerca de los diferentes métodos de salida de html desde PHP;¿cuáles son las diferencias de rendimiento entre estos:

Método 1 de la variable de concatenación

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

Método 2 - almacenamiento en búfer de salida

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

Sospecho que usted consigue un poco de impacto en el rendimiento de continuamente la modificación y ampliación de una variable;es eso correcto?

Saludos!

Gracias GaryF, pero yo no quiero una respuesta acerca de la arquitectura - esta pregunta es acerca del rendimiento.Parecen existir diferentes opiniones / pruebas acerca de que es más rápido, por lo que hay no se aceptan como respuesta aún.

¿Fue útil?

Solución

Es un poco viejo, pero esta publicación de Sara Golemon probablemente ayudará. AFAIK las funciones de búfer de salida son bastante rápidas y eficientes y también lo es echo, así que eso es lo que usaría.

Otros consejos

Dejando a un lado la idea de la concatenación de cadenas, realmente estás preguntando (creo) cómo deberías construir páginas web, y me sorprende que cualquier forma de concatenación explícita sea probablemente algo incorrecto.

Intente usar el Modelo-Vista-Patrón de control para construir sus datos y pasarlo a una biblioteca de plantillas simple (como Smarty ), y dejar que se preocupe por cómo construir su vista .

Mejor separación, menos preocupaciones.

Yo normalmente uso el método #1 así que puedo poner que el HTML en un archivo de plantilla que contiene HTML estático.Yo trate de mantener el mayor HTML de mi PHP.Se hace mucho más limpio y más corto de PHP, como la plantilla es generalmente un archivo separado.

En cuanto a la velocidad/rendimiento, estoy pensando en la diferencia será mucho menor.Con almacenamiento en búfer de salida, es también la ampliación de una variable todo el tiempo, a pesar de que la variable no está accesible, pero tiene que ser almacenados en algún lugar.

A menudo me he preguntado si de apertura y cierre <?php es más lento que poner todo el interior <?php y luego echo ing todos a la vez.

Creo que al final estamos hablando de milisegundos extremadamente complejas secuencias de comandos.

Oh, sí, el método #1 es mucho más flexible como usted puede echo $html; en cualquier lugar.

Es cierto que hay una ligera sobrecarga al modificar constantemente una variable y volver a imprimirla. Sin embargo, no hacer eso significa que en algún momento el script puede terminar de ejecutarse (debido a una interrupción o similar), y las declaraciones de eco secuenciales habrán impreso parcialmente la página en lugar de nada.

Iba a escribir una respuesta larga sobre cómo las cadenas PHP son mutables (en oposición a las cadenas inmutables como en C o C #), pero creo que simplemente vincularé a una publicación anterior que encontré . Básicamente, trato con lo que está preguntando, con respecto a la solución Java y C # de usar un generador de cadenas.

nota al margen: la solución del creador de cadenas sería similar a (sin probar):

$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);

Solo un par de pensamientos:

  • El almacenamiento en búfer de salida puede hacer que sus páginas se vean lentas, ya que el usuario no ve nada hasta que se haya ejecutado todo el script (aunque la forma en que ha configurado la # 1 es la misma).

  • Las cadenas en php son mutables, por lo que la concatenación no es tan mala como en otros idiomas. Dicho esto, el almacenamiento en búfer de salida puede ser un poco más rápido, ya que el espacio asignado para la entrada es bastante grande por defecto (40K de acuerdo con esto )

Al final, diría que es más una cuestión de estilo. Si te gusta lo que te compra el buffering de salida, entonces probablemente sea el camino a seguir.

Las respuestas a su pregunta también se pueden encontrar aquí: php: output [] w / unirse vs $ salida. =

La concatenación de cadenas es la forma más rápida de construir cadenas.

No he probado " echo " vs construcción de cadenas, pero siempre que no esté utilizando el eco de salida almacenado en búfer, debería ser el más rápido debido a las escrituras secuenciales en un búfer de descarga automática. (solo la desaceleración está en la descarga, lo que realmente no evitará incluso si realiza la concatenación de cadenas por adelantado)

Algo que no he visto mencionado es que, por lo general, el chico PHP tiene que trabajar con personas de diseño que necesitan clasificar el HTML o agregar estilos de otra manera, por lo que la solución debe tenerlo en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top