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.
Réponses
Trop de publicités?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."
1.5 secondes d'intervalles sont très larges écarts de servir une saisie semi-automatique de service.
- 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.
- Utiliser le cache des résultats des méthodes si votre le service est très utilisé pour ignorer re-fetchs.
- 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.
- Regex filtrage sur le côté client ne sera pas cher, vous pouvez lui donner une chance.
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é.
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!