Tengo una solicitud para obtener datos en mi base de datos mySQL (36 848 entradas). Luego los formateo y los agrego con jQuery en mi página web.
Estas dos operaciones toman 2 minutos y 30 segundos. Durante este tiempo, ninguna otra operación es posible en la página.
¿Hay alguna manera de optimizar esto para acelerar el proceso? Así, es inutilizable.
Mi función PHP
<?php function get_my_customers() { $req = $bdd->prepare("SELECT * FROM clients ORDER BY raison_sociale"); $req->execute(); $customers = $req->fetchAll(PDO::FETCH_ASSOC); return $customers; } if(isset($_POST['ajax'])){ $result = get_my_customers(); echo json_encode($result); } ?>Recuperación de datos en jQuery (Ajax)
function get_my_customers(){ var customers; $.ajax({ url: "model/application/*******/customers/get_my_customers.php", async: false, type: "POST", dataType: 'json', data: {ajax: 'true'}, success: function(data) { customers = data; } }); return customers; } var my_customers = get_my_customers(); $('#customers_list').append('<div class="list_card" card="customers_list"></div>'); $.each(my_customers, function(key, val){ if(val.enseigne == null){ var enseigne = ''; }else{ var enseigne = ',' + val.enseigne; } $('.list_card[card="customers_list"]').append(''+ '<div class="list_card_element">'+ '<div><b>'+ val.numero_client +'</b></div>'+ '<div>'+ '<b>'+ val.raison_sociale +'</b>' + enseigne + '<br>'+ val.cp_livraison + ', ' + val.adresse_livraison + '</div>'+ '</div>' ); });¿Sabes qué puedo hacer para acelerar el tiempo de procesamiento? Intenté limitar la consulta SELECT solo a los campos que necesito, pero eso no mejora el tiempo de procesamiento.
Me pregunto si no es más bien el diseño de jQuery lo que lleva tiempo en lugar de la consulta SQL.
Gracias !
Use herramientas de desarrollo en su navegador para determinar qué paso está causando la ralentización. La pestaña Red le mostrará la solicitud de Ajax y el intervalo de tiempo de la obtención de datos. Si ese intervalo de tiempo no es el problema, es probable que sea con Javascript. Puede profundizar en el rendimiento de Javascript utilizando la pestaña Rendimiento.
trate de usar índices ver que
MySQL puede usar un índice en las columnas en ORDER BY (bajo ciertas condiciones). Sin embargo, MySQL no puede usar un índice para orden mixto ASC, DESC por (SELECT * FROM foo ORDER BY bar ASC, pants DESC). Compartir su consulta y la instrucción CREATE TABLE nos ayudaría a responder su pregunta de manera más específica.
Acabo de pasar de 2 minutos y 30 segundos a 14 segundos con esta optimización.
var construct_customers = ""; $.each(my_customers, function(key, val){ if(val.enseigne == null){ var enseigne = ''; }else{ var enseigne = ',' + val.enseigne; } construct_customers += '<div class="list_card_element">'+'<div><b>'+ val.numero_client +'</b></div>'+'<div>'+'<b>'+ val.raison_sociale +'</b>' + enseigne +'<br>'+val.cp_livraison + ', ' + val.adresse_livraison +'</div>'+'</div>'; //OLD CODE // $('.list_card[card="customers_list"]').append(''+ // '<div class="list_card_element">'+ // '<div><b>'+ val.numero_client +'</b></div>'+ // '<div>'+ // '<b>'+ val.raison_sociale +'</b>' + enseigne + // '<br>'+ // val.cp_livraison + ', ' + val.adresse_livraison + // '</div>'+ // '</div>' // ); }); $('.list_card[card="customers_list"]').append(construct_customers);Estoy impresionado