Pregunta

Siempre estoy usando una variable de salida en PHP donde tengo entendido todo el contenido antes de que me hago eco de ella. Después leí en alguna parte (no me acuerdo donde, sin embargo) que se obtiene un mejor rendimiento si se divide la variable de salida en paquetes y cada paquete eco en lugar de toda la variable de salida.

¿Cómo es realmente?

¿Fue útil?

Solución

Si está dando salida realmente grandes cadenas con eco, es mejor utilizar varias instrucciones de eco.

Esto es debido a la forma algoritmo de Nagle hace que los datos ser amortiguada a través de TCP / IP.


Ha encontrado un nota en PHP-bugs al respecto:
http://bugs.php.net/bug.php?id=18029

Otros consejos

Esto romperá automáticamente grandes cadenas en trozos más pequeños y el eco a cabo:

function echobig($string, $bufferSize = 8192) {
  $splitString = str_split($string, $bufferSize);

  foreach($splitString as $chunk) {
    echo $chunk;
  }
}

Fuente: http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why

Creo que una mejor solución se presenta aquí ....

http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why#comment-5606

........

Los chicos, creo que enangosté aún más abajo!

Como se dijo anteriormente, el almacenamiento en búfer de PHP PHP le permitirá carrera hasta el final de la secuencia de comandos, pero después de lo que le sigue “colgar” al tratar de pasar todos esos datos para Apache.

Ahora me fue capaz, no sólo de medir esto (ver comentario anterior), pero en realidad para eliminar el período de espera dentro de PHP. Lo hice por el aumento de búfer de envío de Apache con la directiva SendBufferSize.

Esto empuja a los datos de PHP más rápido. Supongo que el siguiente paso sería la de sacar de Apache más rápido, pero no estoy seguro de si en realidad hay otra capa configurable entre Apache y el ancho de banda en bruto.

Esta es mi versión de la solución, se hace eco sólo si no se interrumpe la conexión. si el usuario desconecta entonces se cierra la función.

<?php
function _echo(){
    $args    = func_get_args();
    foreach($args as $arg){
        $strs = str_split($arg, 8192);
        foreach($strs as $str){
            if(connection_aborted()){
                break 2;
            }
            echo $str;
        }
    }
}
_echo('this','and that','and more','and even more');
_echo('or just a big long text here, make it as long as you want');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top