Image du projet 'Newsletter' téléversée
  1. Newsletter
  2. NEWSLETTER-140

Amélioration drastique des performances

    XMLWordImprimable

Informations

    • Bug
    • Résolution: Résolu
    • Majeur
    • master, 1.08.01, 1.07.08
    • branche 1.6, 1.07.00-BETA-00
    • Aucune

    Description

      Le traitement d'une newsletter par certains clients mails peut amené à être très lent. Cela est en parti dû au traitement des CSS qui est fait.

      Rappel du fonctionnement des CSS pour les newsletters :

      1. Les fichiers SCSS sont compilés en CSS au moment du packaging
      2. Le contenu du CSS est ajouté au flux HTML de la newsletter lors de l'envoi, dans une balise <style>
      3. Lors du traitement du flux HTML, les CSS de la balise <style> sont redispatchées dans toute la page, au niveau des balises que les règles ciblent (important : ici, la notion de priorité des sélecteurs disparaît au profit de la règle du dernier qui parle qui a raison)

      Lors de cette dernière étape, le flux HTML se retrouve donc alourdi de balises styles contenant les règles CSS appropriées mais néanmoins nécessaires pour des raisons de compatibilités entre les différents clients mails (meilleure solution à ce jour).

      Or, la balise <style> n'est pas supprimée.

      C'est ce qui pose problème à des clients mails (ou peut-être serveurs IMAP qui filtrent certains contenus) qui peuvent mettre jusqu'à + de 10 secondes pour répondre et renvoyer le mail.

      La solution est simple. Dans le code de la méthode String NewsletterCSSUtil.externalCssToInlineStyles(String) ajouter la ligne suivante :

      public static String externalCssToInlineStyles(final String html) {
          final Document documentToParse = Jsoup.parse(html);
          final Elements styleElements = documentToParse.select(STYLE_TAG);
          for (final Element styleElement : styleElements) {
              final Element styleContent = getStyleContent(styleElement);
              final String style = StringUtils.replace(styleContent.data(), LF, StringUtils.EMPTY)
                  .replaceAll("@media[^{]+\\{([\\s\\S]+?\\})\\s*\\}", StringUtils.EMPTY);
              final StringTokenizer st = new StringTokenizer(style, RULE_DELIMITERS);
              parseStyle(st, documentToParse);
              styleElement.remove(); // <-- CELLE-CI
          }
          return documentToParse.toString();
      }
      

      Pièces jointes

        Liens des tickets

          Activité

            Personnes

              christopher.machicoane-hurtaud Christopher MACHICOANE-HURTAUD [X] (Inactif)
              christopher.machicoane-hurtaud Christopher MACHICOANE-HURTAUD [X] (Inactif)
              Votes:
              0 Voter pour ce ticket
              Gérer les observateurs:
              2 Démarre l'observation de ce ticket

              Dates

                Création:
                Mise à jour:
                Résolue: