Question

L'écran de recherche avancée de mon site Web contient environ 15 champs nécessitant un champ à complétion automatique.
Leur contenu dépend de la valeur de chacun (donc, si l'un est rempli, le contenu de l'autre changera en fonction de la valeur du premier).
La plupart des champs offrent une multitude de possibilités (au moins 1 000 entrées).

Effectuez actuellement un appel ajax si l'utilisateur arrête de taper pendant une demi-seconde. Cet appel ajax fait un appel rapide à mon index Lucene et retourne un tas d'objets JSon. La méthode elle-même est très rapide, mais c'est la connexion et le transfert de données qui sont trop lents.

Si je regarde d’autres sites (par exemple, Facebook), leur saisie semi-automatique est instantanée. Je suppose qu'ils ont mis les valeurs possibles dans leur code HTML, de sorte qu'ils n'ont pas à faire d'aller-retour. Mais je crains avec la quantité de données que je traite, ce n'est pas une option.

Des idées?

Était-ce utile?

La solution

  1. Renvoie uniquement les x meilleurs résultats.
  2. Obtenez des tendances sur ce que les utilisateurs choisissent, et ordre basé sur cela, de préférence automatiquement.
  3. Cache les résultats pour chaque URL & amp; combinaison de touches, afin que vous n'ayez pas à aller-retour si vous avez déjà récupéré le résultat avant.
  4. Partager ce cache avec tous autocompletes qui utilisent la même URL & amp; combinaison de touches.
  5. bien sûr, activer la compression gzip pour le JSON et assurez-vous de configurer votre cache les en-têtes à mettre en cache pour certains temps. Le temps dépend de votre taux de changement de réponse autocomplete.
  6. Optimiser le JSON pour envoyer le le strict minimum. Ne pas envoyer tout ce dont vous n’avez pas besoin.

Autres conseils

Renvoyez-vous TOUS les résultats pour les possibilités ou seulement les 10 meilleurs objets json.

Je remarque que beaucoup de gens envoient un grand nombre de résultats à l'écran, mais ne montrent que les premiers. En renvoyant un petit nombre de résultats, vous réduisez le transfert de données.

Renvoyer le haut de la page " X " résultats, plutôt que toute la liste, pour réduire le nombre d'options? Vous pouvez également essayer d’établir des tendances pour suivre ce que les utilisateurs ont choisi dans la liste afin de pouvoir placer le haut de la page & X; X " le plus utilisé / le plus pertinent. Vous pouvez toujours renvoyer d’abord votre liste la plus pertinente, puis la liste complète s’ils se débattent toujours.

En plus de limiter l'ensemble des résultats à un ensemble X supérieur, envisagez d'activer la mise en cache sur les réponses des demandes AJAX (ce qui signifie utiliser GET et conserver l'URL simple).

C’est étonnant de voir combien de fois les utilisateurs reviennent en arrière puis retapent exactement le même contenu. De plus, en autorisant la mise en cache publique et côté serveur, cela pourrait accélérer le temps de parcours total.

  • Cachez les résultats dans System.Web.Cache
  • Utiliser un cache Lucene
  • Utilisez GET not POST car IE met en cache cette
  • Ne récupérez qu'un sous-ensemble de résultats (10 comme le suggèrent les personnes)
  • Essayez un widget de saisie semi-automatique tiers, comme le YUI .

Renvoyer les N premières entrées est une bonne approche. Mais si vous voulez / devez retourner toutes les données, je voudrais essayer de limiter les données envoyées et l'objet JSON lui-même.

Par exemple:

"Cette entreprise avec un nom long" devient " This Here Company ... " (vous mettez les points dans le nom côté client - encore une fois; transférez un minimum de données).

Et pour ce qui est de l'objet JSON:

{n: "This Here Company", v: "1"}

... Où & n; n " serait le nom et " v " serait la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top