8771 sujets

Développement web côté serveur, CMS

Bonjour,

mes pages principales deviennent de plus en plus lourdes. Smiley eek

Exemple : http://www.collection-appareils.fr/general/html/listeA_imagettes.php
Elles sont dynamiques : base SQL, php faites entièrement maison from scratch.

J'ai l'idée de générer automatiquement les mêmes pages en HTML deux fois par jour, afin d'alléger les accès en base de données et d'améliorer le temps d'affichage.

Le problème est que je ne sais pas comment faire. Smiley decu

Quelqu'un a-t-il une idée ? un script tout fait existe-t-il quelque part ? une instruction php ?

Merci de votre aide.
Salut,

Petite question, pourquoi ne pas faire une navigation classique ? pagination ? navigation par catégorie etc ? cela éviterais de charger toutes ta base de données sur une page Smiley smile
Bonjour Jencal

Merci pour ton message.
c'est déjà le cas.
Ce que tu vois dans la liste ne correspond qu'aux marques commençant par une lettre de l'alphabet. Dans le menu "Appareils" l'accès est déjà subdivisé en 24 listes. Le site présente plus de 15 000 appareils photo, tous en base de données. Heureusement qu'ils ne sont pas tous dans la même page Smiley smile
Il y a aussi un accès par un moteur de recherche, mais la préférence des utilisateurs est celle par imagettes. Le site a plus de 20 ans d'existence, et les discussions avec les utilisateurs sont sans appel, car les imagettes servent à l'identification des appareils qu'ils ont entre les mains.
Salut,

a priori plutôt que de "générer du html", tu dois pouvoir faire de la gestion de cache en php pour générer la page une seule fois puis la distribuer à partir du cache (à voir si tu fais ça sur une base de temps ou de mise à jour, cela peut être plus ou moins compliqué à mettre en place).

Après je trouve étrange, la plus part de tes pages semblent correct niveau chargement, juste ces pages d' "appareils" qui sont lentes, est ce que tu n'as pas juste un traitement à la con qui prend trop de temps et que tu pourrais améliorer (une requête a améliorer ? peut être juste un index à rajouter qui changerait grandement la vitesse de la requête. Ou une partie de l'algo à améliorer? trop de conditions en boucle, ou trop de boucles imbriqués). Sans code difficile de faire des suggestions mais ça me semblerait la piste à privilégier.

L'autre truc bizarre sur ces pages d'appareils, c'est que tu as l'air d'avoir plein de page php différentes alors que cela semble être toujours le même traitement, juste une partie des données différentes qui doit s'afficher, je ne sais pas si tu as mutualiser le code ou pas Smiley ohwell
Bonjour Mathieuu.

Je ne sais pas comment gérer du cache (j'ai le niveau amateur en code). Je vais regarder cette possibilité.
Normalement j'ai mis des index sur les champs de la base servant aux recherches et aux tris, mais je vais rebalayer à nouveau la structure des tables.

Effectivement, j'ai plusieurs scripts différents juste pour tenir compte de la sélection alphabétique, mais ils appellent le même script ensuite.

Quand tu dis que le temps de chargement des pages d'appareils sont lentes, parles-tu de celles avec toutes les petites imagettes (ex : http://www.collection-appareils.fr/general/html/listeF_imagettes.php) ? Si oui, effectivement c'est celles-ci que je trouve lourdingues.

modération: Je viens de rééditer le lien afin que ça ne pointe pas vers une page 404 Smiley smile
Modifié par niuxe (28 Jun 2023 - 19:21)
Oui je parle bien du "lot de pages" qui sont listés en haut de l'onglet "Appareils" : 3m à Avant, Baby à Camera .. etc

La page Nouveautés qui m'a l'air de faire pas mal "d'imagettes" aussi se charge dans la seconde, alors que le lot de pages mettent bien 10s à chaque fois avant d'avoir quoi que ce soit ..

Cool si c'est toujours le même script ensuite, on peut espérer que cela soit lui qui pose problème et qu'en le corrigeant cela améliorera les perfs pour tout ce lot de page.
Modifié par Mathieuu (27 Jun 2023 - 14:22)
La différence entre "Nouveautés" et les autres est qu'il y a beaucoup plus de ruptures de tri dans celles des appareils. Je vais creuser ça.
Pour la gestion du cache, je regarde, cela semble une solution intéressante.

Merci de ton aide.
Modérateur
Salut,

La page qui est pointée par le lien que tu as partagé pèse un peu moins de 9 mio. Ce sont les images qui alourdissent ta page. Si ta requête SQL fait moins de 300ms, tu ne peux pas faire grand-chose de ce côté-là.

Pour tes images, je t'invite à utiliser l'attribut "lazy" afin de différer le chargement. Au niveau du HTML, tu peux gagner quelques kilos en ayant une sémantique HTML plus en adéquation avec ton contenu. Je ne vois pas l'intérêt de <table> imbriqués.

D'une manière générale, je rejoins ce qu'a proposé Jencal. Je trouve que son intervention est pertinente pour ton cas.

En ce qui concerne le cache (la proposition de Mathieuu), c'est intéressant. Mais, comme ton contenu est statique (le contenu de ta page ne se met pas à jour toutes les minutes), je pense que c'est à faire dans un second temps. Pour ne pas t'embêter, utilise un template engine comme Twig. La mise en cache est simple à faire (entourer le contenu à mettre en cache par 2 tags Twig)

edit :
1. le formulaire en haut de la page n'a pas l'air de fonctionner
2. le lien de la source des images est en relatif. Or, pour moi, je pense qu'ils devraient être en absolu
Modifié par niuxe (27 Jun 2023 - 15:59)
J'ai mis en application la gestion du cache et ça change tout. L'affichage, sauf au remplissage du cache (toutes les 2 heures) est devenu quasi instantané.
Hum, je ne sais pas ce que tu as fais mais tu as l'air d'avoir cassé un truc Smiley ohwell
Et il y a un messages d'erreur qui pop sur la page d'accueil:
Erreur SQL ! SELECT COUNT(*) as masomme FROM notices_simples WHERE proposee=''

Edit : Ah non c'est ton lien en F qui contient la parenthèse fermante ^^'
Modifié par Mathieuu (28 Jun 2023 - 09:13)
Modérateur
Mathieuu a écrit :


Edit : Ah non c'est ton lien en F qui contient la parenthèse fermante ^^'


Je viens de rééditer son message Smiley smile
Outre la rapidité à laquelle tu as maintenant accès grâce au cache (sauf 1er chargement), pour infos, tu peux également tester tes page pour voir si elles sont conforme ou non. s'il y a des erreurs etc..;

https://validator.w3.org/check?uri=http%3A%2F%2Fwww.collection-appareils.fr%2Fgeneral%2Fhtml%2FlisteF_imagettes.php&charset=%28detect+automatically%29&doctype=Inline&group=0

Voici le résultat pour ta fameuse page.

On voit qu'il y a plus de 700 erreurs.
Bonjour, j'ai commencé à checker/ corriger.

J'ai une erreur récurrente que je ne comprends pas (mais on s'éloigne du sujet du Post)

document type does not allow element "tr" here
…00%" ><a name="Haut" id="Haut"></a><tr><td class="titre_tableau1" ><a name="Fa…
?
The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).


voici le début du fichier :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Est-ce que j'ai écrit une connerie ? (je me doute de la réponse Smiley ohwell )
Modérateur
bonjour,

si le parent de tr est table, thead, tbody ou tfoot tout va bien et il te suffit de passer l'id sur le tr et de virer l'ancre qui n'a rien à faire là . tu peut aussi la passer dans la première cellule si tu tiens vraiment a garder une balise <a> vide comme ancre.

Les messages d'erreurs ne sont pas tous à interpréter à la lettre, une erreur en début de document peut ensuite en générer une multitude en cascade. Le validateur n'a aucune réflexion et te permet seulement de pister et mettre en avant des incohérences basiques de syntaxe du code.
Ici un <a> dans la structure d'un tableau est invalide, mais ensuite un <tr> derrière un <a> l'est aussi . En corrigeant cette première erreur, la deuxième n'existe plus Smiley smile

cdt
Modifié par gcyrillus (29 Jun 2023 - 12:57)
Salut,

petite question en voyant ton entête Smiley vieux : Est ce que xhtml est toujours utilisé ? Je le pensais deprecated depuis l'arrivé du html5 Smiley sweatdrop