Temps de chargement et nombre de commentaires

matcomatco Member

Bonjour,
La "Search console" de Google m'informe de temps de chargement anormalement longs sur mobile.
J'utilise un thème optimisé pour mobile, mes pages sont plutôt lights, sans images, mais mon site date de 2009 et certaines pages totalisent un nombre de commentaire élevé. 1 commentaire = 1 fichiers XML.
Dans la durée cela peut-il poser problèmes ? Est-il possible d'optimiser (cache) ?
Je ne voudrais pas archiver les commentaires qui contribuent au référencement.
Merci,
MaT.

Réponses

  • Bonjour,

    Une solution serait de paginer les commentaires afin de n'en charger qu'une partie ...

    De quelle version de PluXml parles tu et quelle version de php ?

    Cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • kowalskykowalsky Member

    Salut @matco
    Peux-tu nous définir ce que signifie des "temps de chargement anormalement longs sur mobile" (1 seconde, 5 sec, 30 sec, 1 minute, 5 minutes...) ? et "un nombre de commentaire élevé" (10, 50, 100, 500, 1000 commentaires...) ?
    Quelle limitation de bande passante a été appliquée pour le test : simulation de 2G, 3G, 4G, 5G ? quel serveur de test a été utilisé par rapport à la localisation de l'hébergement de ton site ? il y a tellement de paramètres à prendre en compte...
    Avec Firefox tu peux simuler un test en mobile en local et vérifier le temps de chargement théorique depuis ton site.
    Les algorithmes de Google changent tout le temps et cherchent toujours à promouvoir leurs solutions d'optimisation, alors que bien souvent il n'y a pas grand chose à faire sur nos sites PluXml qui sont déjà hyper rapides si l'on compare aux temps de chargement de sites sous Wordpress par exemple :) D'autant que si comme tu l'indiques, tu n'as pas d'images ou de scripts sur ton site, il va être difficile de faire mieux.

    Et sinon, quand tu te connectes à ton site depuis ton mobile, quel est ton ressenti ? Si tu nous en donnes le lien, on peut regarder si l'on constate à notre tour des anomalies

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Bonjour,
    D'après le lien ci-dessous, si tu n'as pas fait de mise à jour, ton site est propulsé par PHP 5.2.12 dans le meilleur des cas.
    T'es chez Free ?
    https://www.php.net/archive/2009.php

    Si tu as un fort trafic, ton hébergeur t'impose peut-être une limitation de bande passante. Et selon son offre.

  • matcomatco Member
    4 janv. modifié

    Merci pour vos retours.
    Site régulièrement tenu à jour. Je suis sur une 5.8.16 depuis décembre et php 8.2 ou 3 chez ovh. L’idée de paginer les commentaires n’est pas mauvaises… à creuser.
    Je totalise près de 30.000 commentaires sur env. 200 pages mais avec des disparités entre pages, certaines en ont beaucoup donc ça doit ralentir le chargement pour Google. La search console parle de « Problème CLS : plus de 0,25 ». J’imagine qu’il s’agit de 0,25 secondes.
    À l’usage, le temps de chargement est effectivement plus long sur certaines pages qui ont beaucoup de commentaires mais ce n’est pas insupportable non plus, je pense que Google est relativement exigent de ce point de vue… mais je suis en wifi ou 4g donc…
    @kowalsky je vais essayer de tester ta solution Firefox
    Sinon j’ai quand même quelques script (adsense, Analytics, plateforme Rgpd)
    Mat

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Whouah 30.000 commentaires ! Cela commence à faire.Et dire que certains se plaignent de la limite de 9999 articles =)

    A chaque page affichée (article, accueil, catégorie ...), PluXml demande la liste des fichiers correspondant à tous ces commentaires pour vérifier que le nom est correct.

    PluXml a besoin d'être optimisé pour cela.

    • Cela se passe avec la fonction plxGlob::initCache() dans le fichier class.plx.glob.php qui utilise une vieille méthode basée dur opendir() et scandir() et qui pourrait être remplacée par glob().
    • C'est un peu plus compliqué à faire mais on peut aussi demander les commentaires d'une liste limitée d'articles affichée sur la page d'accueil , catégorie, tag, article, ... Cela peut être intéressant s'il a une grande disparité sur le nombre de commentaires pour chaque article.
    • Ultime solution un plugin qui met en cache cette liste de commentaires en interceptant le hook plxMotorConstructLoadPlugins dans plxMotor::__construct(). Cache à rafraichir selon une fréquente à définir (1 à 12 heures par exemple)

    Pour le premier point, je vais regarder cela. C'est assez simple à faire.

    Tu parles de 200 pages. Je suppose que tu veux dire articles.

    Par curiosité tu as quel plan d'hébergement chez OVH ?

  • matcomatco Member

    J’utilise la formule hébergement PRO d’OVH. C’est du mutualisé mais je n’ai pas à m’en plaindre.
    C’est bien 200 articles, quelques pages statiques mais essentiellement des articles.
    J’ai réfléchi à pas mal de solutions dont basculer les commentaires sur un script externe type Isso, Comentario mais il faut gérer cela sur un serveur dédié, envisager une migration de l’historique des commentaires ce qui n’est pas gagné d’avance et suppose de renoncer à la légèreté de pluxml et à l’absence de bdd. Donc si tu as une solution sans sortir de l’environnement pluxml, je prends !
    En revanche, l’aspect conversationnel de ces scripts (possibilité de répondre à un commentaire et de créer des conversations est également un point intéressant).

  • kowalskykowalsky Member
    4 janv. modifié

    D'après ce que je lis sur "Problème CLS : plus de 0,25", ce n'est pas forcément lié à ton nombre de commentaire élevé, mais plus à une mauvaise mise en page de ton site, avec des "décalages de mise en page" (qui donc augmentent le temps de chargement) dixit une recherche rapide sur le net :
    https://kinsta.com/fr/blog/cumulative-layout-shift/
    https://www.blogdumoderateur.com/optimiser-temps-chargement-site-etapes/

    D'après ces sites, tu devrais pouvoir récupérer plus d'informations depuis ta console Google pour t'orienter vers l'optimisation de ton site. Une piste à explorer : tes modules adsense ou rgpd

  • 4 janv. modifié

    En revanche, l’aspect conversationnel de ces scripts (possibilité de répondre à un commentaire et de créer des conversations est également un point intéressant).

    En paginant les commentaires, ce coté pratique est perdu, Les commentaires sont malheureusement indexé sur leur ordre d'affichage et pas leur position dans le tableau des commentaire ni leur date.

    J'ai relevé il y a peu un bug avec le système de commentaire, en supprimant certain commentaires, il arrivent que tout ceux qui suivent (réponses ou non) ne puissent plus être affichés.

    En paginant les commentaires depuis PluXml (pour n'en charger et parser qu'une partie) , la réponse à un commentaire est bien enregistrée mais peut ne pas s'afficher ou s'afficher dans plusieurs page.
    Le tri et la relation entre les commentaires se fait à partir du champ "parent", lui même calculé sur la position(index) rapport uniquement aux commentaires affichés. Avec une pagination des commentaires, une réponse à un commentaire se perd et ne sait pas ou elle habite :)
    En bref, les réponses aux coms ne fonctionnent que si l'on affiche tous les commentaires dans la page et que le(s) parents (visuellement) n'ont pas été effacé(s).

    Il est possible de faire cette pagination en JavaScript ( ex: https://pluxopolis.net/creer-une-pagination-pour-les-commentaires.html surement plus à jour) mais ne donnera aucun gain de temps de chargement ni d'affichage.

    Comme te l'indique @kowalsky , ce décalage dans l'affichage peut aussi être lié à un autre script (depuis ton site ou un cdn ) , des images , polices plus longue à chargées ou distantes, ... Dans le navigateur chrome tu as dans les outils de développeur l'onglet lighthouse qui va t'aider à trouver ce qui prend du temps à charger ;)


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • matcomatco Member

    Merci pour vos retours, beaucoup de choses intéressantes et à creuser. Ce n'est pas aussi simple qu'en apparence.
    La Search Console te présente un graphique "URL Lente sur mobile" mais en réalité, le "problème CLS" est, en effet, plus large.
    @gcyrillus-nomade : j'ai installé Lighthouse que je ne connaissais pas, très intéressant. Il est clair que les pages avec plus de commentaires mettent plus de temps à charger. Pour autant, ce n'est pas le seul paramètre détecté par Lighthouse donc à creuser.
    Tu parles de réponse à un commentaire ? On est bien d'accord que Pluxml ne le permet pas ? Les commentaires s'affichent pas ordre d'arrivés et il n'est pas possible de créer des conversations ?

  • Tu parles de réponse à un commentaire ? On est bien d'accord que Pluxml ne le permet pas ? Les commentaires s'affichent pas ordre d'arrivés et il n'est pas possible de créer des conversations ?

    Heu si, du moins dans le thème par défaut , en repondant à un précedent commentaire, le nouveau commentaire s'intercale avec une legere indentation, ce systeme peut s'étaler sur 5 niveaux.

    Voici un plugin en exemple pour paginer les commentaires : https://ressources.pluxopolis.net/banque-plugins/plugins/comPaginate.zip

    Pour afficher la barre de navigation, ajoute juste sous les commentaires , aprés la boucle d'affichage) cette portion de code :

    <?php if(isset($plxShow->plxMotor->aConf['comNav'])) echo $plxShow->plxMotor->aConf['comNav'] ?>
    

    La pagination ne s'affiche que si il y a plus d'une page de commentaire.
    Par défaut, j'ai mis 50 commentaires, mais tu peut modifier cette valeur depuis l'admin dans la config du plugin.
    Si tu nèutilise pas la fonction de "repondre" à un commentaire, alors cela devarit te convenir, en tout cas permettre de tester l'impact de tes centaines de commentaires au chargement.

    ++


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Bonjour,

    J'ai optimisé le code du fichier core/lib/class.plx.glob.php dans ce gist sur Github :
    https://gist.github.com/bazooka07/289b3efd0ecbe77217a67abbf7e8016d
    Sauvegarde l'ancien fichier et remplace le avec le lien ci-dessus.
    Hélas,je n'ai pas 30000 commentaires sous le coude pour évaluer le gain du temps de réponse lorsque qu'un visiteur charge une page web.
    N'hésite pas à me faire un retour.
    Cette modif sera intégré dans la prochaine version de PluXml 5.8.18.

  • matcomatco Member

    Bonjour,
    Merci @bazooka07 , je viens de modifier le fichier class.plx.glob.php. Pour l'instant, je ne peux pas te dire grand chose excepté que cela semble fonctionner. Un test avec Lighthouse semble indiquer du mieux avec sur ma page comptant le plus de commentaires : une performance globale qui passe de 74 à 85 à l'instant "T". Mais je confirme que les problèmes "CLS" sont plus larges et englobent d'autres problèmes (par exemple, l'absence de balise "width" "height" sur l'image captcha est détectée comme un problème de mise en page car susceptible de créer des décalages sur mobile, ou des requêtes tardives sur les CSS ? bref pleins de trucs à creuser).
    @gcyrillus-nomade : la possibilité de répondre aux commentaires est gérée par le thème ? A quel niveau cela se gère t-il ? car mon thème ne le prend pas en charge et cela m'intéresse.
    Encore merci à tous.

  • 5 janv. modifié

    Bonjour,

    Voici le fichier XML pour un commentaire:

    <?xml version='1.0' encoding='UTF-8'?>
    <comment>
        <author><![CDATA[]]></author>
        <type>normal</type>
        <ip></ip>
        <mail><![CDATA[]]></mail>
        <site><![CDATA[]]></site>
        <content><![CDATA[]]></content>
        <parent><![CDATA[]]></parent>
    </comment>
    

    Le champ "parent" est celui qui est utilisé pour identifié un commentaire comme une réponse à un autre commentaire.

    Dans le thème par défaut, il y a :

    <script>
    function replyCom(idCom) {
        document.getElementById('id_answer').innerHTML='<?php $plxShow->lang('REPLY_TO'); ?> :';
        document.getElementById('id_answer').innerHTML+=document.getElementById('com-'+idCom).innerHTML;
        document.getElementById('id_answer').innerHTML+='<a rel="nofollow" href="<?php $plxShow->artUrl(); ?>#form" onclick="cancelCom()"><?php $plxShow->lang('CANCEL'); ?></a>';
        document.getElementById('id_answer').style.display='inline-block';
        document.getElementById('id_parent').value=idCom;
        document.getElementById('id_content').focus();
    }
    function cancelCom() {
        document.getElementById('id_answer').style.display='none';
        document.getElementById('id_parent').value='';
        document.getElementById('com_message').innerHTML='';
    }
    var parent = document.getElementById('id_parent').value;
    if(parent!='') { replyCom(parent) }
    </script>
    

    Ce script se charge principalement de remplir la valeur du champ "parent" : document.getElementById('id_parent').value=idCom;.

    Pour conserver le bon numéro , remplacer dans le fichier commentaires.php

    <?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?>
    

    par

    <?php $plxShow->comIndex() ?>
    

    Afin qu'une réponse soit bien associer à son commentaire parent même si elle ne s'affiche pas et que le numero de commentaire affiché soit le bon.

    Les commentaire seront récupérer dans plxMotor avec la fonction getcommentaires() , puis trié avec parentChildSort_r() .
    et ils sont stockée dans $plxMotor->plxRecord_coms

    Pour ajouter cette fonctionnalité dans ton thème il faut reprendre lle principe du thème par défaut en passant aussi le champ <input type="hidden" id="id_parent" name="parent" value="<?php $plxShow->comGet('parent',''); ?>" />

    L'indentation visuelle est appliqué via une classe avec <?php $plxShow->comLevel(); ?> .

    cdt

    P.S. en réduisant le tableau $aFiles avec array_slice() avant de parser tout les fichiers commentaires de l'article affiché et gagner un peu de temps (par exemple un groupe de 50 fichiers au lieu des 300), il n'est pas possible à ce niveau de retrouver tout les fichiers des commentaires parent/enfant. , d'où la perte de cette fonctionnalité.
    Réduire le tableau après avoir parser tous les fichiers commentaires n'a plus de sens en terme de gain de temps, et peut-être alors fait coté visiteur en JavaScript, imposant alors un délai supplémentaire de traitement à l'affichage finale.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • matcomatco Member
    5 janv. modifié

    Merci @gcyrillus-nomade.
    @bazooka07
    A priori, la modification génère une erreur lors de la modification d'un article, elle disparait en mettant l'ancien fichier class.plx.glob.php.

    > Fatal error :
    > type : 2
    > message : include(): Failed opening './themes/skya-1/' for inclusion (include_path='.:/usr/local/php8.3/lib/php')
    > file : /index.php
    > line : 63
    > 
    > See https://www.php.net/manual/en/errorfunc.constants.php about type of error
    > ============================================================
    > User : 001
    > Profil : 0
    > PluXml version : 5.8.16
    > PLX_DEBUG : false
    > PHP version : 8.3.9
    > ============================================================
    > About this server :
    > SCRIPT_NAME : /index.php
    > REQUEST_URI : /index.php?article78/
    > QUERY_STRING : article78/
    > REQUEST_METHOD : GET
    > SERVER_PROTOCOL : HTTP/1.1
    > SCRIPT_FILENAME : /index.php
    > SERVER_SOFTWARE : Apache
    > HTTP_ACCEPT_LANGUAGE : fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
    > HTTP_ACCEPT_ENCODING : gzip, deflate, br, zstd
    > HTTP_REFERER : /
    > HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    > HTTP_USER_AGENT : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
    > PHP_SELF : /index.php
    
  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    @matco,
    Effectivement les templates pour les articles, catégories, homepage et statiques ne sont pas recensés correctement.
    J'ai révisé le gist pour corriger cela :
    https://gist.github.com/bazooka07/289b3efd0ecbe77217a67abbf7e8016d
    en remplacement du core/lib/cass.plx.glob.php d'origine

    Mais on doit pouvoir encore améliorer le temps de réponse. Recenser les 30000 commentaires à chaque affichage de page web, c'est un peu comme trainer un boulet, on ne peut pas courir vite.
    Mais c'est un peu plus compliqué à faire et cela va demander quelques tests

  • @bazooka07
    Une solution est effectivement de paginer les commentaire pour ne récolter qu'un nombre limiter de commentaires en mode article, difficile de passer outre le sccan du dossier.
    Le défaut actuel est seulement que l'on perd facilement la relation parent/enfant/level des commentaires. Une solution serait d'ajouter un champs child ou children , de façon à aller chercher un ou plusieurs fichiers commentaire exclu du tableau dans un deuxième temps en les ajoutant a la sélection/page en cours)

    Il semble aussi encore préférable, avec ou sans pagination, de remplacer

    <?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?>
    

    par

    <?php $plxShow->comIndex() ?>
    

    Dans commentaire.php

    J'ai des semaines très chargée à venir, je regarderais à te faire une démo de l'idée en modifiant un peu le plugin pour ajouter le champ child si l'idée te semble pas claire. Oui, c'est un peu potage.

    C'est une fonctionnalité qui pourrait-être native même si rarement utile.

    On a vu 10 000 articles et maintenant + 3000 commentaires, Les limites de PluXml peuvent-être atteintes :)

    Pour le moment , le plugin de test se greffe sur le hook IndexBegin de façon à réduire encore le tableau déjà filtrer $aFiles des commentaire à traiter. Je squatte accessoirement le tableau $this->aConf pour y stocker la navigation. https://ressources.pluxopolis.net/banque-plugins/plugins/comPaginate.1.0.2.zip
    L'idéal serait probablement de pouvoir réduire le nombre de nom de fichier commentaires en amont dans plxMotor sitôt le mode connu.
    Via un plugin , il faut attendre le chargement de ceux-ci, c'est pourquoi je me suis accroché, peut-être à tord, sur IndexBegin pour récupérer la config du plugin et calé $start/$limite.

    Cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    @gcyrillus-nomade ,
    Côté site :
    Actuellement, dès qu'on crée l'instance de $plxMotor, on va tout de suite recenser les commentaires. Avec 30000 commentaires, c'est juste un peu bourrin !
    Il vaut mieux recenser les commentaires dans plxMotor::getArticles() en créant une instance $this->plxGlob_coms, $this étant plxMotor, et en se limitant aux articles qui vont être affichés pour connaitre le nombre de coms / article.
    Là où je bloque pour l'instant, c'est pour l'affichage des derniers commentaires. Pour la homepage et les pages statiques, il faut recenser tous les commentaires pour ne prendre que les plus récents, à moins de mettre la liste des plus récents dans un fichier cache dans data/configuration, fichier à actualiser à chaque nouveau commentaire.
    Dans les autres cas, categorie, tag, archive, on peut récupérer la liste des articles dans $plxMotor->motif et recenser les commentaires relatifs à cette liste
    Remarque : dans le thème defaut, on ne gère pas les derniers commentaires par catégorie dans la sidebar mais globalement
    Côté admin,
    Là c'est le délire. On a uniquement besoin de recenser les commentaires pour le tableau de commentaires dans le fichier comments.php. Quel intérêt quand on affiche la liste des articles, des medias, des catégories,des pages statiques, des paramètres, ...

    Bon ok des sites à 30000 commentaires avec PluXml, on n'en voit pas tous les jours. But why not ?

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    @matco

    Comment gères tu la liste des derniers commentaires ?
    globalement sur ton site ou par catégorie ?

    On peut avoir l'adresse de ton site ? En privé éventuellement.

  • 6 janv. modifié

    @bazooka07

    Là où je bloque pour l'instant, c'est pour l'affichage des derniers commentaires.
    à moins de mettre la liste des plus récents dans un fichier cache dans data/configuration, fichier à actualiser à chaque nouveau commentaire.

    Je ne voit pas vraiment d'autres solutions à mon niveau , et en y sauvegardant aussi le nombre de coms par numero d'article.
    Les tags, c'est un peu similaire, ils sont extraits d'un unique fichier pour ne pas courir sur tous les fichiers articles.
    Ce serait économique , puis le recensement des fichiers commentaires n'aurait lieu qu'en mode article et seulement sur ceux préfixés du même numéro.

    Coté admin, c'est effectivement aussi compliqué mais on ne revient quasiment jamais dessus, sauf à modérer, effacer ou modifier ponctuellement un ou deux commentaires sur lesquelles on ne revient jamais.effectivement Inutile aussi de tout récupérer par défaut
    Extraire seulement les X derniers commentaires (depuis le même fichier tampon que pour le front) serait souvent suffisant en y ajoutant la possibilité de faire quand même l'affichage depuis tous les coms uniquement à la demande ou pourquoi pas par articles commentés comme pour le front.

    Cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • matcomatco Member

    @bazooka07, je gère les commentaires directement sur le backoffice.
    Affichage par 100, capcha et Akismet sont de rigueurs même si j’avoue être moins pollué de spam depuis la migration en 5.8.16.
    Je comprends que le nombre de commentaires n’est pas banal mais le site date de 2009 ! Il fonctionne un peu comme un forum (thématique autour de la recherche et l’entraide donc beaucoup d’interaction) , j’ai d’ailleurs longtemps incité les visiteurs à échanger sur un forum dédié mais les échanges en commentaires perdurent !
    Je n’ai pas encore testé la nouvelle version du fichier class.plx.glob.php.

Connectez-vous ou Inscrivez-vous pour répondre.