Foros del Web » Programando para Internet » Javascript »

Por que es tan lenta mi consulta

Estas en el tema de Por que es tan lenta mi consulta en el foro de Javascript en Foros del Web. Hola forer@s hice un buscador de productos, pero lo hace autocompletando. Programe una funcion en el onKeyUp de una caja de texto y llama a ...
  #1 (permalink)  
Antiguo 27/01/2012, 17:08
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Por que es tan lenta mi consulta

Hola forer@s
hice un buscador de productos, pero lo hace autocompletando.
Programe una funcion en el onKeyUp de una caja de texto y llama a a funcion requestj
Código Javascript:
Ver original
  1. function ajax(){
  2.    var ajax = null;
  3.     if (window.XMLHttpRequest){
  4.         try{
  5.             ajax = new XMLHttpRequest();
  6.         }
  7.         catch(e) {}
  8.     }
  9.     else if (window.ActiveXObject){
  10.         try{
  11.             ajax = new ActiveXObject("Msxm12.XMLHTTP");
  12.         }
  13.         catch (e){
  14.             try{
  15.                 ajax = new ActiveXObject("Microsoft.XMLHTTP");
  16.             }
  17.             catch (e) {}
  18.         }
  19.     }
  20.    return ajax;
  21. }
  22. var myAjax2 = ajax();
  23. function requestj(str) {
  24.    myAjax2.open("POST", "ajax_entrada.php");        // nodos
  25.    myAjax2.onreadystatechange = resultj_update;
  26.    myAjax2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  27.    myAjax2.send("search="+str);
  28. }
  29. function resultj_update(){
  30.     if (myAjax2.readyState == 4) {
  31.         //alert(myAjax2.status);
  32.         if (myAjax2.status==200){
  33.             var liste = myAjax2.responseText;
  34.             document.getElementById("tag_update").innerHTML = liste;
  35.             document.getElementById("tag_update").style.display = "block";
  36.         }
  37.     }else{
  38.         if (myAjax2.status==200){
  39.             document.getElementById("tag_update").innerHTML = 'Buscando...';
  40.             document.getElementById("tag_update").style.display = "block";
  41.         }
  42.     }
  43. }
Primer el mensaje 'buscando...' nunca aparece
Oprimo una tecla y no sale nada, despues de mas o menos 30 segundo o 1 minuto aparece la lista con los resultados
este es mi archivo ajax_entrada.php
Código PHP:
Ver original
  1. <?php
  2. require_once('conf.php');
  3. $b=new subbase(IPSERVIDORBD,USUARIOBD,CLAVEBD,BD);
  4. if (isset($_POST['search'])){
  5.     $search = htmlentities($_POST['search']);
  6. }else{
  7.     $search ='';
  8. }
  9.  
  10. $sql = "SELECT p.products_id, COALESCE(p.products_name,'Sin descripcion') AS products_name, t.tax_rate, COALESCE(c.average_cost,0) * (t.tax_rate / 100) AS iva FROM products_description p LEFT JOIN products pc ON pc.products_id = p.products_id LEFT JOIN tax_class tc ON tc.tax_class_id = pc.products_tax_class_id LEFT JOIN tax_rates t ON tc.tax_class_id = t.tax_class_id LEFT JOIN centro_costo_stock c ON p.products_id = c.id_product WHERE p.products_name LIKE '%".$search."%' GROUP BY p.products_id ORDER BY p.products_name LIMIT 0,20";
  11. if ($tabla=$b->sub_tuplas($sql)){
  12.     echo '<ul><li><a href="#"><img src="images/close.png" alt="cerrar" title="cerrar" onclick="document.getElementById(&apos;tag_update&apos;).innerHTML = &apos;&apos;"/></a></li>';
  13.     foreach ($tabla as $fila){
  14.         echo '<li><a href="#" onclick="selected(this.innerHTML);">'.htmlentities($fila['products_name']).' | '.htmlentities($fila['products_id']).' | '.htmlentities($fila['costo']).' | '.htmlentities(number_format($fila['tax_rate'],2)).'</a></li>';
  15.     }
  16.     echo '</ul>';
  17. }
  18. $b->cerrar_conexion();
La tabla products tiene mas de 5000 registros, por eso envio un limit para que no me traiga todo lo que encuentra, si no los primeros 20...
Mi error puede estar en la consulta???? o es error en la forma en que hago el llamado asincrono???
No pido que me hagan la consulta ni nada de eso, solo que me aconsejen un poco ya que nunca he trabajado con tantos datos, Muchas Gracias
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #2 (permalink)  
Antiguo 27/01/2012, 20:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Por que es tan lenta mi consulta

puede volverse lento por el mismo onkeyup, porque enviarias una consulta por cada tecla pulsada, seria bueno que validaras que al menos el input tenga una longitud mínima (4 letras por ejemplo) antes de enviar el request

también depende mucho de la velocidad de conexión y la capacidad de tráfico/proceso de tu server
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 30/01/2012, 16:47
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Por que es tan lenta mi consulta

Hola maycolalvarez lo solucione colocando indices a mis tablas, espero sea una solucion optima
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:10.