2010-04-09 5 views
2

Bonjour, Je construis une application interne pour mon entreprise en utilisant le autocomplete de jQuery et je trouve qu'elle a tendance à démarrer très lentement. Mon hypothèse est que le goulot de la bouteille ajoute peut-être ses éléments au DOM, car après la première requête, il semble être sensiblement plus rapide. Est-ce que quelqu'un sait d'une manière de pré-charger ces éléments sur le chargement de page au lieu de le faire pour la première fois quand l'utilisateur commence à taper?Chargement lent de la saisie semi-automatique jQuery

+0

Quelle langue côté serveur utilisez-vous? –

+0

PHP mais ce n'est pas le problème, c'est toujours plus lent au premier essai. PAR EXEMPLE. si je tape 'foobar' comme première requête et 'random' comme la suivante, les résultats aléatoires apparaîtront significativement plus vite (j'ai vérifié les requêtes MySQL et la peine revient à quelque chose comme 0.01ms) –

Répondre

1

Si vous n'avez pas à utiliser les appels ajax pour récupérer des données et que votre liste de saisie semi-automatique n'est pas trop grande, vous pouvez alimenter les données pour la saisie semi-automatique à partir du tableau js d'objets.

laisse supposer que vous avez ces données (que vous construisez aussi tôt que vous voulez/pouvez):

var data = [{"n":name, "p":pagename,"c":number_of_results},...]; 

appel Alors autocomplete regarderait:

$("#autocomplete").autocomplete(data, { 
    matchContains: true, 
    formatItem: function(row, i, max) { 
     return row.n + " ("+row.c+")"; 
    }, 
    formatMatch: function(row, i, max) { 
     return row.n; 
    }, 
    formatResult: function(row) { 
     return row.n; 
    } 

}); 
$("#autocomplete").result(function(event, data, formatted) { 
    if(!data) { 
     alert("Please select an item"); 
    } else { 
     window.location.href = data.p; 
    } 
}); 

Cela va créer un autocomplete qui ressembler à item name (number of results), et en cliquant sur un élément, il redirigerait vers un nom de page correspondant.

J'ai environ 1000 articles et la vitesse de saisie semi-automatique est instantanée.

0

Le côté serveur sur PHP/SQL est lent.

N'utilisez pas PHP/SQL. Ma saisie semi-automatique est écrite en C++ et utilise des hashtables pour la recherche. Voir la performance here.

Voici l'ordinateur Celeron-300, FreeBSD, Apache/FastCGI.

Et, vous voyez, s'exécute rapidement sur d'énormes dictionnaires. 10 000 000 d'enregistrements ne sont pas un problème.

En outre, prend en charge les priorités, les traductions dynamiques et d'autres fonctionnalités.