Ca dépend de ce que demande l’administrateur, plusieurs types de requêtes peuvent être générées.
Dans sa configuration de base.
La base de données des forums contient le nombre de posts et de topics. Ce qui permet d’éviter de générérer une requête par forum pour récupérer le nombre de page.
Idem pour les topics, chaque topic contient son nombre de posts ce qui évite de générer une requête COUNT pour obtenir le nombre de posts.
Pour afficher que les 20 premiers posts et les 20 premiers topics, c’est un simple LIMIT, ca évite de passer la table en entier. Un tout petit calcul permet de connaitre le début et le nombre de posts à afficher.
Tout ceci est ensuite passé au moteur qui va s’occuper de générer l’URL en fonction de la page demandée et vérifie si l’URL REWRITING est activé. Si tel est le cas, il génère un lien .html.
Si tu veux d’autres renseignements, n’hésites pas.
Une remarque toute bête concernant le code posté plus haut.
Tu devrais éviter d’utiliser innerHTML pour mettre à jour tes affichages, avec DOM, ça fonctionnerait sous tous les navigateurs et c’est pas beaucoup plus long à mettre en place, compte tenu de tout le boulot que t’as déjà effectué !
Je ne connais absolument rien en javascript, ja vais essayer de trouver des infos sur “DOM”. J’en ai entendu parler mais j’ai trouvé innerHTML beaucoup plus simple. Ce que j’aimerais faire, c’est un code global qui récupèrerait le nom des balises DIV dans les balises XML de la réponse du serveur, ca serait beaucoup plus simple à générer.
Justement… Un LIMIT c’est bien pour quelques centaines de posts, au-delà le temps de requête SQL augmente en fonction du nombre de post, et c’est de plus en plus lourd ! (en fait, le LIMIT, passe en revue TOUS les enregistrements correspondant à son champs avant d’atteindre les enregistrements demandés)
Si tu veux plus d’infos, va voir sur le topic des devs. de forums sur HFR (je ne linke pas ici, on sait jamais :whistle: )
Tu pourrais donc gagner en charge serveur et temps de génération des pages en remplaçant le LIMIT par une autre méthode (genre BETWEEN ou IN())
BETWEEN, que je ne connaissait pas, trouve tous les enregistrements compris entre X et Y, mais étant donné que l’on de connait pas les numéros de posts il faudrait ajouter une requete LIMIT avant.
On pourrait numéroter tous les posts, par exemple :
Post 1 du topic 10
Post 2 du topic 10
Post x du topic 10
Mais ca risque d’être le border en cas de supprétion d’un post, il faudrait exécuter une requête de “décrémentation” pour tous les post qui ont un numéro supérieur au post supprimé.
UPDATE table_des_posts SET numero_du_post = numero_du_post - 1 WHERE numero_du_post > numero_du_post_supprime
Pour IN ca serait à peu près la même chose.
Je ne peux pas afficher le forums que tu me conseilles.
Alors euh pour le BETWEEN, si tu as aussi une ID de posts pour chaque topic (en plus de l’ID général), tu peux fair eun between 0,40 puis 40,80 etc… sur le n° de post intra-topic
Mais en cas de suppression de posts, ça fera des vides sur certaines pages
Pour le IN, il faut certes un LIMIT, mais uniquement sur le champ ID; ce qui reste bien moins lourd qu’un LIMIT sur la totalité des posts
Mieux, un LIMIT sur l’ID de posts intra-topic, pour manipuler des IDs plus petits…
Ceci a été beaucoup débattu sur HFR (le forum du site hardware.fr)
Sinon la discussion sur le sujet commence là et se termine une dizaine de pages plus loin
Pour le moment les posts n’ont pas d’ordre de classement, ils ont tous un ID mais il est général. Je vais faire quelques bench pour voir ce que ca donne.
En fait il faudrait un ID général comme c’est actuellement le cas, puis un autre ID référent à chaque sujet.
Ainsi, la masse d’IDs à traiter s’en trouvera fortement réduite !
Ah, ok je crois qu’on ne parlait pas de la meme chose.
Les topics ont un ID général et un ID de topic, quant le forum affiche un topic, il génère la requête :
SELECT post_id, etc... FROM table_des_posts WHERE topic_id=numero_du_topic LIMIT 0, 20
Ca lui évite de parcourrir toute la table pour ne trouver que les posts correspondant au topic.
J’ai commencé quelques bench avec BETWEEN et c’est vrai que le mieux serait en plus de l’ID du post et de l’ID du topic, ajouter le numéro de classement du post et de faire un BETWEEN dessus.
Je viens de générer une base de données contenant plus de 12 millions d’entrées pour faire des tests.
Mais bon BETWEEN s’apparente plus à un LIKE ou un IN qu’à un LIMIT.
Oui ok pour le principe de l’ID de topic, mais il faudrait appliquer le même principe aux posts dans un topic: un ID général et un ID propre au topic.
DIsons que pour le BETWEEN, en cas de suppression de post, il faudrait donc décrémenter de 1 tous les IDs de posts intra-topic pour ne pas avoir de vides.
Edit: ah oui, tu pourras poster tes résultats de benchs stp ?
C’est sur que plus de 2 secondes ca fait quant même beaucoup…
Sinon c’est vrai que c’est en optimisant chaque petite chose qu’au final…
Je viens de faire des tests en remplacant BETWEEN par WHERE sql_id>‘x’ AND sql_id>‘x’. Les résultats sont les même quoique à un moment il est descendu à 0.0004 secondes.
Je ne sais pas encore ce que je fais pour le forum mais il est possible que je fasse un script que réindexe les posts en leur attribuant un ID de classement.
Sinon j’ai quelque chose que je n’arrive pas à faire en SQL, j’ai lu qu’il est possible d’inclure des clauses IF dans une requete SQL, je voudrais utiliser ca pour les tables liées, par exemple si je lie la table sessions avec la table users par le numéro du membre, je voudrais qu’il ne les lie pas si le numéro du membre est un certain chiffre. J’utilise des LEFT JOIN pour faire la liaison. J’ai réussi à inclure des AND dans un ON mais je n’arrive pas à inclure un IF.
Sinon bah niveau programmation c’est pas quelque chose de surnaturel, mais bravo quand même, moi j’aurais jamais l’envie de me lancer dans un forum complet !
Parcontre je te conseil, si tu ne connais pas, de jetter un coup d’oeil à SMF, c’est franchement balèze je trouve, et ça peut être constructif pour voir comment eux ils sécurisent, et construisent…
rha mais il le lache pas son SMF lui :lol:
je l’ai installé en local et franchement je ne le trouve pas si “puissant” que ça, pour reprendre tes termes…