Autocomplete/AJAX et performances
Bonjour,
J'ai réussi à faire fonctionner la fonction Autocomplete de Jquery UI via AJAX interrogeant ma base de données, mais avec un temps de réponse catastrophique (3 secondes sous Symfony2 versus 20ms avec PHP sans Symfony2).
Ai-je fais des erreurs dans mon raisonnement ?
Voici ma logique : une route insérée dans la partie URL d'AJAX via la contrôleur accède au repository adéquate et retourne un objet Réponse (en JSON).
De plus, voici ce que j'ai développé :
1) Le script dans la vue Twig :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
<script>
$('#men_commandesbundle_commandetype_nature').autocomplete({
source : function(requete, reponse){
var motcle = $('#men_commandesbundle_commandetype_nature').val();
var DATA = 'motcle=' + motcle;
$.ajax({
type:"POST",
url : "{{ path('mencommandes_ajaxnature') }}",
dataType : 'json',
data : DATA,
success : function(donnee){
reponse($.map(donnee, function(objet){
return objet;
}));
}
});
}
});
</script> |
b) La route :
Code:
1 2 3 4 5 6
|
mencommandes_ajaxnature:
pattern: /ajaxnature
defaults: { _controller: menCommandesBundle:Commandes:ajaxnature}
requirements:
_method: POST |
c) L'action AjaxNature dans le contrôleur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public function ajaxnatureAction()
{
$request = $this -> get('request');
if($request->isXmlHttpRequest())
{
$term = $request->request->get('motcle');
$array= $this->getDoctrine()
->getEntityManager()
->getRepository('menCommandesBundle:commande')
->listeNature($term);
$response = new Response(json_encode($array));
$response -> headers -> set('Content-Type', 'application/json');
return $response;
}
} |
d) La fonction ListeNature dans le repository :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public function listeNature ($term)
{
$qb = $this->createQueryBuilder('c');
$qb ->select('c.nature')
->where('c.nature LIKE :term')
->setParameter('term', '%'.$term.'%');
$arrayAss= $qb->getQuery()
->getArrayResult();
// Transformer le tableau associatif en un tableau standard
$array = array();
foreach($arrayAss as $data)
{
$array[] = $data['nature'];
}
return $array; |
Si quelqu'un a une idée pour le temps de réponse catastrophique, merci par avance.
Je précise que depuis, j'ai externalisé dans un fichier Javascript la partie correspondante dans la vue Twig, mais sans aucun changement sur les performances.
Spiffou92.