La vitesse de mon discourse est très lente

not implemented

1 « J'aime »

Moins de publicité, c’est un bon début, je pense. :slightly_smiling_face:

9 « J'aime »

Wow

Wow. Vous ne rigoliez pas ! C’est complètement inutilisable. Je n’ai même pas pu déterminer de quoi parlait le site avant d’abandonner.

La vitesse du processeur unique et celle du SSD sont des facteurs majeurs. Quelle est la vitesse du processeur ? Vous n’avez pas de disques durs mécaniques, si ? Avez-vous exécuté la configuration de Discourse ou modifié les paramètres de mémoire depuis que vous avez changé la quantité de RAM ? Avez-vous ajusté les paramètres de la base de données ? Utilisez-vous une installation standard officielle de Discourse ?

Mais comme votre site sert principalement des publicités, il est impossible de déterminer comment se comporte Discourse en termes de performance.

2 « J'aime »

nous utilisons des SSD sur notre serveur


J’ai testé le site avec un bloqueur de publicités et la vitesse reste lente

Discourse est installé par DigitalOcean

non, je ne l’ai pas fait

non !

Vous devez soit exécuter à nouveau discourse-setup, soit lire les commentaires dans app.yml pour ajuster la configuration de la mémoire.

Vous ne devriez avoir besoin d’aucun espace d’échange.

Votre base de données est-elle très volumineuse ?

J’ai déjà exécuté discourse-setup, mais cela n’a rien changé en termes de vitesse.

Oui, nous avons plus de 27 000 sujets sur notre site.

Dans mon expérience, l’aperçu des listes de sujets (Plugin) ralentit considérablement Discourse. Vous pouvez essayer de passer à l’aperçu des listes de sujets (TC), qui se charge beaucoup plus rapidement que le Plugin.

Si vous désactivez complètement l’aperçu des listes de sujets, Discourse sera plusieurs fois plus rapide. :grinning:

Nous utilisons un plugin personnalisé pour permettre aux sujets d’afficher toujours les images CDN partagées dans les sujets, dans les métadonnées OG si nous les partageons sur les réseaux sociaux. Ce plugin de support CDN est développé par @fzngagan, Faizan. Avez-vous une méthode pour déplacer votre plugin écrit vers le TLP TC afin que le site se charge plus rapidement ?

@pfaffman Avez-vous des suggestions techniques spécifiques sur ce que nous devons exactement faire pour accélérer notre base de données et notre site web ? Je suppose que sur howtodiscuss.com, il y a plus de 50 000 sujets et c’est un site à fort trafic.

Mes questions :

  1. Existe-t-il une configuration de multithreading, de CPU parallèle ou de cœurs que nous pouvons configurer dans Discourse ? NodeBB propose cela pour faire face à un fort trafic.

  2. Y a-t-il un support de mise en cache côté serveur dans Discourse, et où et comment le configurer ?

  3. Comment pouvons-nous atteindre un score de 100 % sur Google PageSpeed pour https://howtodiscuss.com ?

  4. Quels changements pouvons-nous apporter au fichier app.yaml ? Nous sommes sur un droplet Digital Ocean avec 4 vCPU et 8 Go de RAM.

  5. Nous utilisons Cloudflare pour servir notre site. Y a-t-il des optimisations que nous pouvons faire là-bas ? Lorsque j’active Rocket Loader de Cloudflare, mon Discourse ne fonctionne pas correctement et affiche des erreurs dans la console JS côté client.

  6. Existe-t-il un moyen de minifier automatiquement le CSS, le JS, le HTML et d’activer la compression gzip côté serveur ?

  7. Veuillez partager des informations sur les optimisations que vous avez réalisées sur meta.discourse.org pour faire face à un trafic plus élevé ; nous pouvons essayer les mêmes.

  8. Veuillez partager des informations sur les optimisations que d’autres sites à fort trafic sur Discourse ont essayées.

Une fois que nous aurons réussi à accélérer notre site, nous serons heureux que vous publiiez notre site dans la liste des communautés Discourse réussies. Merci.

Eh bien, le nombre de sujets n’est pas égal au nombre de publications ni à la taille de la base de données, mais cela n’est pas si important.

Le site est actuellement hors ligne, je ne peux donc pas voir le nombre de publications.

Je vous recommande de modifier manuellement le fichier app.yml, d’examiner les informations de réglage qu’il contient, puis de reconstruire. Plusieurs sujets abordent des méthodes pour optimiser la base de données.

Vous pourriez également passer à l’un des nouveaux droplets CPU plus rapides de Digital Ocean.

1 « J'aime »

Salut, @ahmed_khan1. Ne prenez aucun risque de temps d’arrêt, même quelques minutes d’arrêt vous coûteront une précieuse réputation aux yeux de Google.

Engagez simplement un professionnel pour gérer cela une fois pour toutes. Comme je le vois, votre site génère un trafic important, alors faites preuve de bon sens et ne choisissez jamais l’option bon marché.

Je recommande quelqu’un comme @pfaffman et @angus.

2 « J'aime »

Je fais tourner un site de 20 000 sujets sur une machine à 2 cœurs et 2 Go de RAM sans aucun problème (mais peut-être pas aussi actif que le vôtre…)

Mais oui, si le problème vient de l’exécution d’un grand nombre de scripts JavaScript, alors les performances du backend sont sans importance.

Avez-vous réglé ceci à zéro ?

Cela aidera un peu.

Vous pouvez passer au TC pour accélérer TLP, mais cela présente une limitation de rendu dans les navigateurs basés sur Chromium (c’est pourquoi je n’ai pas encore désactivé le plugin ; j’attends que LayoutNG mette à jour Grid CSS).

3 « J'aime »

Nous avons un nouveau droplet DigitalOcean. Achetez-le simplement sur 1
Voici app.yml

## Ceci est le modèle de conteneur Docker Discourse tout-en-un, autonome

##

## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire

## /var/discourse/launcher rebuild app

##

## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !

## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !

## visitez http://www.yamllint.com/ pour valider ce fichier au besoin

templates:

  - "templates/postgres.template.yml"

  - "templates/redis.template.yml"

  - "templates/web.template.yml"

  - "templates/web.ratelimited.template.yml"

## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)

#- "templates/web.ssl.template.yml"

#- "templates/web.letsencrypt.ssl.template.yml"

## quels ports TCP/IP ce conteneur doit-il exposer ?

## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,

## consultez https://meta.discourse.org/t/17247 pour plus de détails

expose:

  - "2045:80" # http

#  - "443:443" # https

params:

  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.

## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer

  db_shared_buffers: "2048MB"

  ## peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion

  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)

  #version: tests-passed

env:

  LANG: en_US.UTF-8

  # DISCOURSE_DEFAULT_LOCALE: en

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.

## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer

  UNICORN_WORKERS: 8

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra

  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.

  DISCOURSE_HOSTNAME: "howtodiscuss.com"

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même

  ## nom d'hôte (-h option) que spécifié ci-dessus (par défaut "$hostname-$config")

  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails délimités par des virgules qui seront administrateurs et développeurs

  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'

  DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications

  ## L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis

  ## ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !

  DISCOURSE_SMTP_ADDRESS: smtp-relay.smtp.com

  DISCOURSE_SMTP_PORT: 587

  DISCOURSE_SMTP_USER_NAME: admin@gmail.com

  DISCOURSE_SMTP_PASSWORD: smtp_password

  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (requis par certains fournisseurs)

  #DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com    # (adresse à partir de laquelle envoyer les notifications)

  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optionnel, par défaut true)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit

  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)

## consultez https://meta.discourse.org/t/14857 pour plus de détails

  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared

volumes:

  - volume:

      host: /var/discourse/shared/standalone

      guest: /shared

  - volume:

      host: /var/discourse/shared/standalone/log/var-log

      guest: /var/log

## Les plugins vont ici

## consultez https://meta.discourse.org/t/19157 pour plus de détails

hooks:

  after_code:

    - exec:

        cd: $home/plugins

        cmd:

          - git clone https://github.com/discourse/docker_manager.git

          - git clone https://github.com/discourse/discourse-sitemap.git

          - git clone https://github.com/discourse/discourse-math.git # plugin personnalisé pour la prise en charge de MathJAX

          - git clone https://github.com/discourse/discourse-solved.git # plugin personnalisé pour les questions et réponses et le choix de la meilleure réponse

          - git clone https://github.com/discourse/discourse-voting.git # plugin personnalisé pour voter uniquement sur les sujets

          - git clone https://github.com/discourse/discourse-yearly-review.git # plugin personnalisé pour publier automatiquement un sujet annuel sur l'activité du forum

          - git clone https://github.com/discourse/discourse-user-notes.git # plugin personnalisé permettant au personnel d'ajouter des notes sur un utilisateur

          - git clone https://github.com/paviliondev/discourse-question-answer.git # plugin personnalisé non officiel pour le vote de style SO sur les publications

          - git clone https://github.com/discourse/discourse-adplugin.git # plugin officiel personnalisé pour les publicités

          - git clone https://github.com/discourse/discourse-whos-online.git # plugin personnalisé pour voir qui est en ligne

          - git clone https://github.com/paviliondev/discourse-topic-previews.git # plugin personnalisé pour afficher joliment les aperçus des sujets

          - git clone https://github.com/paviliondev/discourse-ratings.git # plugin personnalisé permettant aux utilisateurs de noter les sujets

          - git clone https://github.com/discourse/discourse-cakeday.git # plugin officiel pour les anniversaires et les célébrations de la date d'inscription

          - git clone https://github.com/discourse/discourse-saved-searches.git # plugin officiel pour les notifications de recherche enregistrée

          - git clone https://github.com/paviliondev/discourse-follow.git # plugin personnalisé permettant aux utilisateurs de se suivre mutuellement

          - git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # prise en charge personnalisée AMP pour HTD

          - git clone https://github.com/discourse/discourse-assign.git # personnalisé pour attribuer des sujets au personnel

          - git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # plugin personnalisé pour afficher les miniatures à partir des images CDN

## Toutes les commandes personnalisées à exécuter après la construction

run:

  - exec: echo "Début des commandes personnalisées"

  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :

## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.

  - exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"

  - exec: echo "Fin des commandes personnalisées"

Je pense que vous exécutez plusieurs sites sur cette seule instance. Je ne suis pas sûr de savoir comment cela affecterait les problèmes de performance.

1 « J'aime »

nous ne faisons tourner que ce site sur ce serveur.

1 « J'aime »

Vous pourriez augmenter db_work_mem à 100.

Vous pourriez rencontrer des problèmes avec votre proxy inverse qui ralentit les choses.

Que montre le mini profileur ?

Vous pouvez également installer le plugin Prometheus pour obtenir plus de données.

Avez-vous essayé de désactiver le plugin Who’s Online ?

1 « J'aime »

J’ai essayé mais je ne vois pas de grande amélioration
@pfaffman
voici l’utilisation du processeur et de la mémoire

j’ai changé le nombre de workers unicorn pour 24
et les tampons mémoire pour 4096 Mo

Avez-vous examiné le côté navigateur ?

Cela dit, il s’agit d’un instantané, mais votre utilisation du processeur semble très faible. Je pense que vous avez surdimensionné les spécifications.

L’utilisation de la mémoire est élevée uniquement en raison du nombre de processus unicorne. Réduisez-les si le système commence à utiliser massivement la mémoire d’échange (swap).

Je vous recommande vivement d’examiner les temps de latence de récupération des données et de JavaScript dans les outils de développement du navigateur.

La lenteur perçue peut être due à la quantité de travail que le navigateur doit effectuer.

2 « J'aime »

D’après les en-têtes HTTP, il semble que vous utilisiez à la fois Ezoic et Cloudflare. Est-ce exact ? Je ne suis pas sûr de ce que cela fait, mais cela pourrait être un autre facteur de lenteur perçue.

Ma recommandation : Commencez par une configuration simple sans aucun proxy ni mise de votre Discourse derrière Cloudflare. Assurez-vous qu’elle soit raisonnablement rapide, et seulement ensuite commencez à optimiser en suivant Enable a CDN for your Discourse ou, si vous voulez vraiment utiliser Cloudflare, Full site CDN acceleration for Discourse.

1 « J'aime »

C’est exact, seul un site, https://howtodiscuss.com, est servi sur ce serveur via NGINX. Avez-vous des solutions pour améliorer sa vitesse ?