Gutenberg: Les blocs de galerie sont lents

Créé le 15 déc. 2017  ·  3Commentaires  ·  Source: WordPress/gutenberg

Aperçu du problème

Le bloc Gallery tel qu'il est actuellement mis en œuvre présente des problèmes de performances et de mise à l'échelle en raison du nombre de demandes qu'il génère. Je ne connais pas les meilleures pratiques dans React, mais je vais essayer d'expliquer ce que je vois lorsque je travaille avec des galeries.

Étapes à reproduire (pour les bogues)

  1. Insérer un nouveau bloc Galerie

  2. Cliquez sur le bouton "Insérer à partir de la médiathèque" pour ouvrir le modal média

    C'est un comportement standard, mais juste pour expliquer ce qui se passe : lorsque le modal média est ouvert pour la première fois, il envoie une requête AJAX query-attachments pour récupérer les 40 pièces jointes les plus récentes et les ajoute à une collection globale accessible à wp.media.model.Attachments.all .Faire défiler la bibliothèque chargera paresseux 40 pièces jointes à la fois.

  3. Sélectionnez 10 images et cliquez sur le bouton "Créer une nouvelle galerie"

  4. Cliquez sur le bouton "Insérer une galerie"

    __Lors de l'insertion de la galerie, le bloc Galerie déclenche une requête distincte à l'API REST pour chaque image de la galerie. Dans ce cas, ce sont 10 demandes qui doivent répondre avant que la galerie puisse être prévisualisée.

    En plus de claquer le serveur avec des requêtes, cela crée également un délai de rendu sous-optimal.__

  5. Cliquez sur le bouton Modifier dans la barre d'outils pour mettre à jour la galerie

    __Le bloc envoie une requête AJAX get-attachment pour chaque image de la galerie. Cela se produit chaque fois que le cadre multimédia est ouvert.__

  6. Fermez le cadre multimédia

  7. Enregistrer la publication

  8. Rafraîchir

    __Lorsque l'éditeur se charge, les images sont récupérées individuellement depuis l'API REST.__

Comportement prévisible


Je m'attendais à ce que les galeries rendent plus rapidement. Sur ma machine locale, une galerie avec 10 images peut prendre de 4 à 10 secondes pour être rendue.

Solution possible


Idéalement, si un article a une galerie, les données d'image seraient préchargées pour éviter toute demande supplémentaire lors du chargement initial.

Lors de l'ouverture du cadre multimédia, le PR #2488 aiderait à minimiser les demandes .

Lors de l'insertion d'une galerie à partir du cadre multimédia, toutes les données nécessaires au rendu de la galerie doivent être disponibles dans la collection wp.media.model.Attachments.all . Ce serait bien d'utiliser des données déjà en mémoire au lieu de générer une nouvelle demande pour chaque image. L'autre option serait de récupérer les données de toutes les images en une seule requête.

J'ai essayé de désactiver withAPIData pour le composant GalleryImage et tout semblait continuer à fonctionner correctement, mais je n'ai pas testé à fond. Si cela était supprimé, les galeries seraient rendues presque instantanément.

Problèmes et/ou PR connexes

Le PR #2488 place le cadre multimédia dans le bon état lors de l'édition d'une galerie, mais empêche également la génération d'une requête AJAX distincte pour chaque image lors de l'ouverture du modal.

[Block] Gallery [Feature] Media [Status] Blocked [Type] Bug [Type] Performance

Tous les 3 commentaires

Le besoin initial de demandes par image a été introduit dans #2874 dans le cadre du collage de shortcode de galerie (cc @iseulde). Il semble que dans la majorité des cas, nous n'ayons pas du tout besoin des requêtes API, donc idéalement, elles pourraient être ignorées. Pour prendre en charge les codes courts de la galerie, je me demande s'il serait préférable que la transformation elle-même renvoie une promesse de résolution des attributs de bloc, pendant laquelle elle pourrait transformer les ID en la forme d'attribut attendue.

J'ai testé l'ajout d'un bloc de galerie avec 10 images, puis l'actualisation de la page de l'éditeur à l'aide de WordPress 4.9.8 et Gutenberg 4.1.1 via une connexion 72 Mbps et j'ai constaté que l'actualisation de la page de la galerie prenait environ 6,2 s (test complet : 1 m3 s ).

Je pense qu'avec les récents changements dans la façon dont nous récupérons les images, cela fonctionne maintenant comme prévu. J'ai vérifié sur 4.3 que le temps de chargement s'est amélioré par rapport à ce problème signalé et que les images ne se chargent pas de la manière que nous voyions dans le passé. Je passe du jalon 5.0 RC car ce n'est pas un bloqueur pour RC.

Le PR initialement suggéré a été fusionné il y a quelque temps.

Cette page vous a été utile?
0 / 5 - 0 notes