47 votes

Comment améliorer les performances de Jquery autocomplete

Je prévoyais d'utiliser jquery autocomplete pour un site et j'ai implémenté une version test. J'utilise maintenant un appel ajax pour récupérer une nouvelle liste de chaînes pour chaque entrée de caractère. Le problème est que cela devient plutôt lent, 1,5 secondes avant que la nouvelle liste ne soit remplie. Quel est le meilleur moyen de rendre l'auto-complétion rapide? J'utilise cakephp et je viens de faire une recherche, avec une limite de 10 objets.

54voto

roosteronacid Points 9678

Cet article , sur flickr ne saisie semi-automatique est une très bonne lecture. J'ai eu un peu de "wow" expériences de lecture.

"Ce widget télécharge une liste de tous les de vos contacts, en JavaScript, en en vertu de 200ms (cela est vrai même pour les membres avec plus de 10 000 contacts). Dans afin d'obtenir ce niveau de performance, nous avons complètement repenser la façon dont nous envoyer des données à partir de la serveur vers le client."

38voto

Darren Cato Points 729

Essayez de précharger votre objet de liste au lieu de faire la requête à la volée.

De plus, la saisie semi-automatique a un délai de 300 ms par défaut.
Peut-être supprimer le retard

 $( ".selector" ).autocomplete({ delay: 0 });
 

11voto

Burcu Dogan Points 6024

1.5 secondes d'intervalles sont très larges écarts de servir une saisie semi-automatique de service.

  1. Tout d'abord optimiser votre requête de base de données et les connexions. Essayez de garder votre connexion db vivant avec mise en mémoire cache.
  2. Utiliser le cache des résultats des méthodes si votre le service est très utilisé pour ignorer re-fetchs.
  3. L'utilisation d'un cache du client (un JS liste) pour conserver l'ancienne demandes sur le client. Si l'utilisateur les types de retour et les efface, il va être utile. Les résultats viendront à partir de l'interface de cache au lieu de backend point.
  4. Regex filtrage sur le côté client ne sera pas cher, vous pouvez lui donner une chance.

5voto

Gumbo Points 279147

Avant de procéder à certaines optimisations, vous devez d’abord analyser où se trouve le goulot d'étranglement. Essayez de savoir combien de temps chaque étape (entrée → demande → requête de base → réponse → affichage) prend. Peut-être que l'implémentation de CakePHP a un délai pour ne pas envoyer de requête pour chaque caractère entré.

4voto

Mike Points 1770

La vraie question pour la vitesse dans ce cas, je crois que c'est le temps qu'il faut pour exécuter la requête sur la base de données. Si il n'y a aucun moyen d'améliorer la vitesse de votre requête, alors peut-être étendre votre recherche afin d'inclure plus d'éléments avec un très haut niveau des résultats classés en lui, vous pouvez effectuer une recherche de tous les autres caractères, et le filtre à travers 20-30 résultats sur le côté client.

Cela peut améliorer l'apparence de la performance, mais à 1,5 secondes, je voudrais d'abord essayer d'améliorer la vitesse de requête.

Autre que cela, si vous pouvez nous donner plus de renseignements que je peut être en mesure de vous donner plus de réponse spécifique.

Bonne chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X