Facebook
Twitter
Google+
Kommentare
6

Edge Side Includes – Nachteile

Vor kurzem hatte ich eine „neue“ Technologie vorgestellt – Edge Side Includes genannt. Habe auch erklärt warum sie total toll ist und so weiter. Im letzten Satz kam dann das ABER, vielleicht ist ja doch nicht alles Gold was glänzt. Dieser Artikel soll ein paar Nachtteile aufdenken, die meiner Meinung nach existieren.

  • Fehlende Framework-Unterstützung: ESI klingt zwar einfach, aber wenn das Framework es nicht unterstützt, dann kann es haarig werden. Das System muss ja so gebaut sein, dass jeder Snippet der Seite unabhängig vom Rest gerendert werden kann. Soviel ich weiß, ist Symfony2 das erste und einzige Framework derzeit auf dem PHP-Markt das es unterstützt. Nachträglich sowas einzubauen halte ich für sehr komplex.
  • Overhead: Das ist jetzt für jedes Projekt eine eigenen Rechenaufgabe. Nehmen wir an, wir nutzen ein relativ schwergewichtiges Framework, welches 100ms braucht um hochzufahren. Jetzt besteht unsere Seite im einfachsten Fall aus zwei Teilen. Da wir dank ESI beide getrennt haben, müssen wir jetzt zwei mal das Framework hochfahren. 200ms einfach im Framework verbraten ist halt schon mal ein doofer Startpunkt für eine Hochlastseite. Wir wollten ESI vor kurzem auch bei einer relativ bekannten Seite einführen und sind daran gescheitert, dass zwei Teile der Seite gar nicht cachebar waren und somit ESI keine Beschleunigung gebracht hätte.
  • Parallelität: Wer gerade den Overhead-Punkt nicht einfach nur überflogen hat, der hat sich sicherlich die Frage gestellt, warum man die zwei ESI-Includes nicht einfach parallel abholt und somit immer nur das Maximum der beiden Requests zu buche schlägt. Tja, ESI kann das leider nur sequentiell. Wobei ich gerade nicht genau weiß, ob es eine ESI-Einschränkung oder ob die Varnisch-Implementierung das Problem ist. Wenn man es aber mal genau betrachtet, kann es schon ganz logisch sein. Was wäre, wenn ein Include Cookies setzt und das andere darauf zurückgreifen will? Wenn immer mal eins von beiden zuerst fertig ist, hat man kein konsistentes Verhalten und debugging wird die Hölle. Heisenbug lässt grüßen.

Das waren jetzt erstmal die von mir gesehenen drei Nachteile. Ihr werdet sicherlich auch noch einiges beitragen können.

Ach ja, heute geht meine Elternzeit zu Ende. Nach zwei Monaten zu hause wieder mal richtig arbeiten. Ich sag euch dann wie es war.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

6 Comments

  1. Was ich auch irgendwie doof finde: der Browser bekommt von den einzelnen Teilen einer Seite nichts mit.
    Die Komponente mit der kleinsten Lebensdauer bestimmt ja die Lebensdauer der gesamten Seite. Wenn die nun rum ist, so muss der Browser die gesamte Seite „besorgen“ obwohl ein großer Teil der Seite wieder derselbe sein wird … die Bestandteile, die noch nicht expired sind.

    Reply
  2. Es macht natuerlich null Sinn eine Seite in zwei nicht cachbare Teile zu konvertieren. Aber sobald man einen Teil auch nur 10sek. cachen kann ist bei einer hightraffic Seite schon viel zu gewinnen.

    Ich will auch noch mal schauen ob wir in einem Projekt folgendes Konzept umsetzen koennen:
    Alle User ohne Javascript bekommen eine unpersonalisierte Seite oder im bestenfall ein kleines iframe mit persoenlichen Daten. Saemtlicher individualisierter Content wird ueber einen einzigen ESI block ausgetauscht und per JS an den relevanten Stellen eingefuegt. Bei Bedarf wird Content auch im localstorage/websql/indexdb/cookie im Browser gecached.

    Reply
  3. @Lukas: Da hatten wir uns auch eine Lösung zu überlegt, die relativ convinient war. Wenn du damit beginnst, melde dich mal kurz mit eurem Git-Repository, vielleicht kann man sich da ergänzen.

    Reply
  4. als einen ersten schritt habe ich im LiipCacheControlBundle einen listener eingebaut mit dem man flash messages in ein cookie verschieben kann. aktuell gibt es aber keine plaene an dem obigen konzept zu arbeiten. denke davor werden wir uns an das LCI-like konzept, ueber das ich kuerzlich gebloggt habe, machen

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen