jquery fetch php data es lento. ¿Cómo hacerlo rápido?

Como describe el título, la velocidad de los datos de visualización de jquery es de 1 a 2 segundos más lenta que la de php puro. demostración en http://plekz.com/test-slow3.php . ¿Cómo hacer que jquery muestre los datos tan rápido como php puro?

Codigos:

<div id="jqryd">
</div>

<script src="javascripts/jquery-1.5.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript">
    var jqryd = $('#jqryd');
    jQuery.get("sale-show-month2.php", function(data) {
        jqryd.html(data);
    });
</script>


<?php
    $sql = "SELECT payment_date, SUM(price) FROM sale WHERE seller_id=? && Year(payment_date)=? GROUP BY Month(payment_date) DESC"; //this is loged-in user.
    $q = $conn->prepare($sql);
    $result = $q->execute(array($user_id, $selected_year));
    if(!$result){
        die("Error Select user table query : ". implode(" : ", $q->errorInfo())); //if don't use implode, output of errorInfo() will be "Array".
    }
    while($r = $q->fetch(PDO::FETCH_ASSOC)){
        $price_db2 = $r['SUM(price)'];
        $payment_date_db = $r['payment_date'];
        $payment_month_db = date("F", strtotime($payment_date_db));
        $payment_month_db2 = date("m", strtotime($payment_date_db));
        echo "This is pure php : " . $payment_month_db . " - " . $money_currency . $price_db2 ."<br>";
    }
?>

preguntado el 22 de mayo de 12 a las 13:05

¿Qué tamaño tienen los datos (es decir, cuántos datos se transfieren desde su servidor)? (puede verificar usando Firebug o cualquier otro depurador) -

la solución depende de qué tan grandes sean los datos? digamos datos de 50kb a 500kb, ¿cuál será la solución? -

4 Respuestas

Analizando el tráfico en el ejemplo de su sitio, veo que, además del resultado, en su sale-show-month2.php página que devuelve incluso el jquery javascript. Esto ralentiza mucho toda la página: por alguna razón, el rastreador de red ve una cadena de consulta en la llamada como http://plekz.com/javascripts/jquery-1.5.js?_=1337691808625, que no permite usar el caché.

Simplemente evite devolver el enlace a jquery mejorará el rendimiento.

Incluso después de eso, verá que los datos cargados de jquery vendrán más tarde, pero esto se debe al hecho de que el get El método se llama después de cargar la primera página. Puede verlo muy claramente con firebug u otra herramienta (chrome e IE tienen la suya).

contestado el 22 de mayo de 12 a las 14:05

bueno 1. Eliminé el enlace jquery-1.5 en sale-show-moth2.php y puedo ver que la velocidad se vuelve muy rápida, pero aún es más lenta que php. Muchísimas gracias. - zac1987

¿Le importaría enseñarme cómo evitar devolver el enlace si quiero agregar el enlace en la página sale-show-month2.php? - zac1987

bueno, no sé php, pero supongo que tiene algún tipo de mecanismo de página parcial. La idea es tener una página parcial que cree el html simple que representa los datos: esta página podría llamarse a través de ajax, como en su ejemplo, o incluirse en una página adecuada, con todos los enlaces a los archivos javascript que necesita. - marcuz

Y volviendo a tu frase: i can see the speed become very fast but it is still slow than php, eso no es cierto. Se llama más tarde, por eso aparece más tarde... pero es tan rápido como el original una vez llamado. - marcuz

veo. Muchísimas gracias. Puse el enlace en la página actual y eliminé el enlace de sale-show-month2.php, ¡y funciona! Feliz. Parece que la página sale-show-month2.php puede leer el enlace de la página actual, ¿este método se puede aplicar solo en el script del lado del cliente? no se puede aplicar a la secuencia de comandos del lado del servidor, ¿verdad? Porque hice una prueba para dejar que sale-show-month2.php leyera el enlace php del lado del servidor (<?php require_once("includes/connection.php"); ?>) de la página actual pero no se lee.. - zac1987

Con respecto a la cantidad de datos transferidos entre el servidor y el cliente, siempre transferiría los datos mínimos requeridos (probablemente usando texto sin formato / XML o JSON según los datos) y usaría el método más eficiente para agregarlo al DOM.

No importa qué tan grandes sean los datos, use el mejor método (en su caso, el más rápido) para agregar al DOM. echa un vistazo a este jsperf para ver un indicador de qué método es el más rápido

Y verá que usar los métodos de creación de DOM incorporados siempre es más rápido, por ejemplo

var li = document.createElement('li');
li.innerHTML = i;
li.setAttribute('title', 'Element number ' + i);
li.setAttribute('class', 'list-item');
container.appendChild(li);

Entonces, en su caso, pasaría los datos como JSON y luego repetiría los nodos y los agregaría según sea necesario. Si hay una gran cantidad de datos devueltos, entonces paginaría los datos, o mostraría algunos datos iniciales y luego agregaría una función "Mostrar más" que recuperó la siguiente parte de los datos que se mostrarán.

Con respecto al backend, me aseguraría de que mi consulta estuviera optimizada y estuviera usando los índices correctos.

contestado el 22 de mayo de 12 a las 14:05

Tu pregunta realmente no tiene sentido. Verifique las transferencias de red con Firebug o Chrome: verá que pasa aproximadamente el mismo tiempo esperando datos en ambos escenarios. Sin embargo, después de recibir los datos generados por php, la página tarda años en descargar jquery, y solo entonces puede solicitar los nuevos datos.

Lo único digno de mención es que se tarda medio segundo en conectarse a su servidor con jquery; este retraso siempre estará presente si la conexión es mala. Con los datos generados del lado del servidor, los obtendrá una vez, con ajax los obtendrá dos veces.

Entonces, en su escenario, no puede acelerar la recuperación, a menos que cambie los servidores a algo con el rendimiento adecuado y los tiempos de respuesta adecuados.

contestado el 22 de mayo de 12 a las 14:05

"Con los datos generados del lado del servidor, los obtendrá una vez, con ajax los obtendrá dos veces". ¿A qué se refiere "eso"? ¿Quieres decir que ajax será 2 veces más lento que jquery? - zac1987

La it es la sobrecarga que paga el usuario por conectarse a su servidor. Lo paga cuando se conecta y descarga el html por primera vez, y lo paga nuevamente si luego tiene que hacer una búsqueda ajax para recibir datos del servidor. - Falso51

Si bien hay algunas formas de optimizar el resultado, la respuesta a su pregunta

¿Cómo hacer que jquery muestre datos tan rápido como php puro?

es: Es imposible.

Su Javascript no podrá cargar nada en el DOM, hasta que esté analizado y listo. Esto implica que los datos de "PHP puro" ya están cargados, ya que los entrega el servidor como parte de la página principal.

Solo entonces, cuando el navegador tiene que hacer otra solicitud al servidor, tomando otro tiempo de ida y vuelta, para obtener la versión AJAX. Entonces: no importa cuán buenos sean su servidor y su JS, la versión AJAX nunca será tan rápida como la versión del lado del servidor.

Nota: Esto se aplica solo a su configuración con ambas versiones compitiendo. Por supuesto, podría tener sentido acelerar la entrega inicial de la página HTML al no usar PHP y una solicitud de base de datos, y luego cargar algunas cosas más tarde con AJAX.

contestado el 22 de mayo de 12 a las 14:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.