2010-07-07 17 views
0

Par exempleEst-il possible de précharger un ensemble de données MyISAM entier en utilisant PHP & jSon?

Disons que nous avons 1000 produits dans une seule catégorie. Et nous aimerions Filtrer à travers ces produits.

Comme nous filtrons à travers les produits en utilisant json. Chaque fois que nous avons besoin d'exécuter une requête distincte à la base de données.

Nous nous demandions si quelqu'un sait s'il est possible d'afficher une précharge de la table des produits. Par exemple barre de préchargement: initialisation de la recherche (0 - 100%)

Ainsi, le système entier ne s'initialiserait qu'une fois en charge, alors nous espérons que les résultats de la recherche pourraient alors être instantanés.

Malheureusement n'est pas vraiment une option pour nous, quelqu'un de si, espérons-peaufinage serveurs clients ici peut avoir une meilleure suggestion

Merci à l'avance! Sur l'extrémité PHP, vous pouvez précharger les enregistrements en quelque chose comme un seau memcache

Répondre

0

Je doute fortement, cependant, que le problème soit la requête de base de données. Il est beaucoup plus probable que la demande de JSON est ce qui prend si longtemps.

Il est certainement possible de précharger toutes les valeurs (c'est-à-dire de les récupérer dans une grande requête). Vous ne donnez aucun détail sur votre système, mais ce serait probablement une grosse demande de JSON.

Je ne vois pas de moyen facile d'implémenter une barre de progression pour la requête Ajax. Peut-être qu'une simple animation de "chargement" fera aussi bien.

Vous devrez probablement utiliser une sorte de stockage local pour conserver les données sur plusieurs pages pour que cela ait du sens. Pour cela, voir this question.

+0

Désolé pour mon retard de réponse, il y a le problème avec le fait que je ne serai pas en mesure d'utiliser memcached, ou un stockage côté client (Google Gears). Connaissez-vous une autre méthode que je peux utiliser pour accélérer les requêtes relativement importantes? Les données JSON produites à partir du résultat sont assez petites, donc je ne pense pas que ce soit le problème. – AMW10

+0

@AMW vous devriez certainement savoir exactement ce que le goulot d'étranglement est forst.Les données JSON peuvent être petites mais si vous faites mille requêtes uniques, la latence va prendre une éternité. Utilisez un profileur PHP côté serveur et mesurez les temps de réponse côté navigateur (en utilisant Firebug). Si c'est du côté serveur, jetez un oeil à la mise en cache des requêtes mySQL - si vous avez un accès root au serveur. – Unicron

0

Il n'est pas très difficile d'interroger 1000 jeux de données, mais il est important de stocker le côté client. Cependant .. pour répondre à votre question:

Javscript peut créer un tableau d'objets. Disons

<script type="text/javascript"> 
var products = new Array() 
products[0] = {name:'First', price:29.99}; 
products[1] = {name:'Second', price:29.99}; 
products[2] = {name:'Third', price:29.99}; 
</script> 

... les créer via php. Au lieu de {...} vous pouvez créer un produit de fonction (nom, prix) puis appeler products[0] = new product("first", 29.99);

Lorsque vous avez configuré cette fonction, toutes les informations sont stockées dans le navigateur du client. Alors maintenant, vous pouvez utiliser une recherche/filtre uniquement via javascript. La barre de chargement peut être facilement exécutée via jquery-ui. La recherche implique une boucle de tableau. Si vous avez plusieurs catégories que vous pouvez séparer avant la main, vous pouvez simplement créer des tableaux différents, au lieu de tout stocker dans le tableau des produits.

Bonne chance!

+0

Merci pour cette réponse. Nous sommes en train d'optimiser notre module. Tout le traitement est actuellement via PHP. Ensuite, nous utilisons JavaScript pour activer et désactiver les filtres. Ceci est un script commercial et nous avons déjà un certain nombre de clients, si vous êtes intéressés à nous aider à optimiser notre script, il va sans dire que nous serons en mesure de vous fournir une licence gratuite pour notre produit commercial. Nous ne nous attendons pas à ce que quelqu'un travaille avec nous sans un type de récompense! Si vous êtes intéressés à nous aider à résoudre ce problème s'il vous plaît contactez notre équipe de support par email [email protected] Merci à l'avance! – AMW10