Content composition with Edge Side Includes — Varnish version 4.0.3-rc1 documentation

/esi.html

  • Enrichissement du #plugin #SPIP inclure-ajaxload :
    http://zone.spip.org/trac/spip-zone/browser/_plugins_/inclure-ajaxload
    documenté ici :
    http://www.paris-beyrouth.org/tutoriaux-spip/article/plugin-inclure-ajaxload

    Je viens d’ajouter la possibilité d’utiliser les inclusions (ESI) de Varnish :
    https://www.varnish-cache.org/docs/3.0/tutorial/esi.html

    Pour cela, il suffit d’indiquer : {ajaxload=esi} et du coup cet include se fera directement au niveau de Varnish.

    Sur Flip-Zone, par exemple, j’ai des caisses entières de liens vers les articles du site (plus d’une dizaine sur chaque page), et ça devient :

    [(#INCLURE{fond=inc/lien_article}{id_article}{lang}{ajaxload=esi})]

    L’idée rigolote, c’est que le plugin balance le code alternatif en ajaxload classique si l’ESI n’est pas activé dans Varnish. Mais ce n’est pas vraiment une bonne idée de faire comme ça, parce que pour le coup je me rends compte que l’include ESI est également adapté aux includes d’entêtes (dans <head>), et que donc là l’inclusion ajax n’est pas pertinente (me semble-t-il). Faudrait peut-être prévoir une alternative plus « rustique »…

    • Cool ! je le testais à l’instant ;) mais pas en varnish … en plus court on peut écrire

      #INCLURE{fond=inc/lien_article,id_article,lang,ajaxload=esi}

      dis @arno, on présente comment du code sur seenthis ?

    • @touti : avec des backticks

      `coucou`

      et, si tu veux présenter ton code sur plusieurs lignes, tu en mets 3 au-dessus et 3 en dessous

    • Bon, il y a une grosse difficulté : les petites inclusions sont des appels SPIP basés sur var_ajax=recuperer. Et ces pages ne sont jamais mises en cache par Varnish (@fil me dit que c’est parce que dans ecrire/inc/actions.php, la fonction ajax_retour ne prévoit pas d’envoyer d’information de durée de vie du cache.

      Du coup, tel quel, mon inclusion ESI est particulièrement productive (j’ai planté Flip-Zone hier et ce matin) : au lieu d’appeler une page SPIP en cache de Varnish (et si elle ne l’est pas : un appel Apache), j’appelle une page qui contient des dizaines d’inclusions ESI qui demandent à charger des pages SPIP en var_ajax, pages qui ne sont justement pas en cache de Varnish, et déclenchent donc autant d’accès à Apache.

      Pour l’instant, tout ce que j’ai trouvé, c’est d’ajouter un réglage à la sauvage dans Varnish, au niveau vcl_fetch :

              if (req.url ~ "var_ajax=recuperer") {
                     set beresp.ttl = 3660s;
                     set beresp.http.Cache-Control = "max-age=3600";
                      set beresp.http.Vary = "Accept-Encoding";
                      remove beresp.http.X-VARNISH-TTL;
              }