{"id":55704,"date":"2025-05-13T16:47:00","date_gmt":"2025-05-13T14:47:00","guid":{"rendered":"https:\/\/www.d-velop.de\/blog\/?p=55704"},"modified":"2025-05-14T06:49:04","modified_gmt":"2025-05-14T04:49:04","slug":"memory-leaks","status":"publish","type":"post","link":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/","title":{"rendered":"Memory Leaks in Micro-Frontend-Architekturen"},"content":{"rendered":"\n<p data-beyondwords-marker=\"37fda17b-a21f-4cae-97ee-d4a4bede5630\">Micro-Frontends \u00fcbertragen das Konzept der Microservices in die Welt der Frontends. Anstelle eines einzigen Monolithen wird das Frontend in einzelne Komponenten zerlegt, die von eigenst\u00e4ndigen Teams verantwortet werden. Damit wird versucht, ein gro\u00dfes Problem in viele kleine Teilprobleme zu unterteilen. Die Micro-Frontend-Architektur eignet sich daher besonders f\u00fcr gro\u00dfe Anwendungen. Die Komplexit\u00e4t eines einzelnen Micro-Frontends ist deutlich geringer als bei einem Monolithen und die Komponenten sind lose gekoppelt. Dadurch k\u00f6nnen Teams leichter neue Funktionen realisieren und diese unabh\u00e4ngig voneinander ver\u00f6ffentlichen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"880d71e1-edbf-4e98-99a8-f3e91a9e1aa2\">Die einzelnen Komponenten eines Micro-Frontends m\u00fcssen in der sogenannten Komposition zusammengef\u00fchrt werden. Hierf\u00fcr gibt es verschiedene Strategien und Technologien. Eine Methode, die schon sehr lange existiert, ist die clientseitige Komposition mithilfe von iFrames. Dabei wird jedes Micro-Frontend innerhalb eines iFrames gerendert. iFrames bieten von Haus aus eine sehr gute Kapselung und es gibt native Methoden f\u00fcr die Kommunikation zwischen iFrames. Au\u00dferdem sind die Teams bei der Verwendung von iFrames frei in der Wahl der Technologie. Auf der anderen Seite sind iFrames aber auch f\u00fcr Performanceprobleme bekannt, und die Sicherstellung einer konsistenten User Experience stellt eine gro\u00dfe Herausforderung dar. Eine weitere Herausforderung bei der Verwendung von iFrames sind potenzielle Speicherlecks, die durch gewisse Bad Practices bei der Entwicklung entstehen k\u00f6nnen.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"2330fda6-b328-4c57-8b14-97a424e1da70\" class=\"wp-block-heading\" id=\"h-was-sind-memory-leaks\"><span class=\"ez-toc-section\" id=\"was-sind-memory-leaks\"><\/span>Was sind Memory Leaks?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"45949090-dd82-40dc-a066-6ef3879612e4\"><strong>Memory Leaks<\/strong> oder auch Speicherlecks bezeichnen Fehler bei der Verwaltung von Speicher. Bei einem Memory Leak wird Speicher belegt, aber nicht wieder freigegeben. Dies f\u00fchrt dazu, dass der Speicherbedarf immer weiter steigt, was zu Programmfehlern oder sogar zu einem Absturz f\u00fchren kann. Im Browser \u00e4u\u00dfert sich ein Speicherleck irgendwann durch die folgende Fehlermeldung:<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a04ff5ee6fda&quot;}\" data-wp-interactive=\"core\/image\" data-beyondwords-marker=\"8dad520c-946a-493e-99e8-7ca45711df1b\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"444\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/browser-fehlermeldung-memory-leak.png\" alt=\"Bild zeigt Fehlermeldung im Browser beim Memory Leak\" class=\"wp-image-55728\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/browser-fehlermeldung-memory-leak.png 652w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/browser-fehlermeldung-memory-leak-600x409.png 600w\" sizes=\"auto, (max-width: 652px) 100vw, 652px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Bild vergr\u00f6\u00dfern: Bild zeigt Fehlermeldung im Browser beim Memory Leak\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p data-beyondwords-marker=\"c649f16e-be0d-46d8-8f5c-781c6df80d83\">Gl\u00fccklicherweise muss sich der Entwickler bei der Programmierung seiner Webseite nicht selbst um die Zuweisung und Freigabe von Speicher k\u00fcmmern. Dies ist die Aufgabe des Garbage Collectors. Der Garbage Collector erkennt automatisch, welche Speicherbereiche nicht mehr ben\u00f6tigt werden und gibt diese frei.<\/p>\n\n\n\n<p data-beyondwords-marker=\"2ab92a8e-050f-4c17-a72e-7ab30c73741e\">Im Chrome-Browser (und den meisten anderen Browsern auch) werden alle Objekte so lange im Speicher gehalten, bis sie von der Garbage Collector-Wurzel (GC-Root) nicht mehr erreichbar sind. Die Objekte sind durch Referenzen miteinander verbunden. Eine solche Referenz kann zum Beispiel das Speichern eines Window-Objektes in einer Variable sein. Wenn diese Variable niemals geleert wird, wird das Window-Objekt auch im Speicher niemals freigegeben.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a04ff5ee73c7&quot;}\" data-wp-interactive=\"core\/image\" data-beyondwords-marker=\"9e3c461a-b965-4c51-b1df-96451d636016\" class=\"aligncenter size-medium wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"540\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-600x540.png\" alt=\"Infografik zeigt die Funktionsweise vom Garbage Collector\" class=\"wp-image-55729\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-600x540.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-1090x981.png 1090w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-768x691.png 768w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-1536x1382.png 1536w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector-1920x1728.png 1920w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/garbage-collector.png 2000w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Bild vergr\u00f6\u00dfern: Infografik zeigt die Funktionsweise vom Garbage Collector\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Die Objekte 5 und 6 sind nicht von der Wurzel erreichbar und werden vom Garbage Collector gel\u00f6scht.<\/figcaption><\/figure><\/div>\n\n\n<h2 data-beyondwords-marker=\"a481283c-ef0a-4515-a307-b362fbd075da\" class=\"wp-block-heading\" id=\"h-memory-leaks-in-micro-frontends\"><span class=\"ez-toc-section\" id=\"memory-leaks-in-micro-frontends\"><\/span>Memory Leaks in Micro-Frontends<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"1aac0dbd-9497-4b08-8630-886aae83c853\">In den meisten Anwendungen funktioniert der Garbage Collector des Browsers sehr gut. Objekte werden automatisch aus dem Speicher freigegeben, wenn sie nicht mehr ben\u00f6tigt werden, und der Entwickler muss sich nur selten explizit um die Speicherverwaltung k\u00fcmmern.<\/p>\n\n\n\n<p data-beyondwords-marker=\"88bd39ed-7076-4f91-80e9-aada5a6b2607\">Bei Micro-Frontend-Architekturen ist jedoch Vorsicht geboten. Insbesondere wenn einzelne Micro-Frontends in Form von iFrames dynamisch hinzugef\u00fcgt und wieder entfernt werden, kann es schnell zu Speicherproblemen kommen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"05305f5d-f560-4bcb-b9f0-ae696e01fe74\">Die Rahmenanwendung in einer Micro-Frontend-Architektur ist f\u00fcr die Verwaltung und Komposition der einzelnen iFrames zust\u00e4ndig. Oftmals werden die einzelnen Komponenten in Variablen gespeichert, um den Zugriff zu vereinfachen. In diesen F\u00e4llen gibt es eine Referenz von der Rahmenanwendung auf die untergeordneten iFrames. Wird diese Referenz nicht korrekt verworfen, verbleiben die iFrames im Speicher, was zu Speicherlecks f\u00fchren kann.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"3e2c8fdd-1952-4f93-bb94-e229d42de861\" class=\"wp-block-heading\" id=\"h-speicherlecks-in-micro-frontends-event-listener-als-risikoquelle\">Speicherlecks in Micro-Frontends: Event Listener als Risikoquelle<\/h3>\n\n\n\n<p data-beyondwords-marker=\"e093af34-b4a0-48eb-a0f4-47a17c0baa7b\">Aber nicht nur bei der Implementierung der Rahmenanwendung ist Vorsicht geboten. Auch bei der Implementierung der einzelnen Micro-Frontends kann es zu Speicherlecks kommen. Eine h\u00e4ufige Ursache sind Event Listener. Registriert die Child-Applikation einen Event Listener bei der Rahmenanwendung, erzeugt sie damit eine Referenz. Wenn diese nicht korrekt aufgehoben wird, kann dies ebenfalls zu Speicherlecks f\u00fchren.<\/p>\n\n\n\n<p data-beyondwords-marker=\"304341e1-366d-45b3-a6a8-9a15fa08e871\">In den meisten F\u00e4llen sollten die untergeordneten Anwendungen nicht direkt auf die Rahmenanwendung zugreifen. Um Fehler zu vermeiden, sollte eine explizite Schnittstelle zwischen der Rahmenanwendung und den iFrames verwendet werden. Hierf\u00fcr bietet sich die Methode postMessage() an. Dies ist ein nativer Weg der Kommunikation zwischen iFrames.<\/p>\n\n\n\n<p data-beyondwords-marker=\"6147c2b6-fc3f-44a3-8743-d5ef377cec65\">L\u00e4sst sich ein direkter Zugriff auf die Rahmenanwendung nicht vermeiden, sollte darauf geachtet werden, dass die Event Listener und andere Referenzen korrekt entfernt werden. Als Trigger f\u00fcr das Aufl\u00f6sen der Referenzen bietet sich das Event beforeunload auf dem Window-Objekt an.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"f8650631-b650-4b2b-a284-c94e2df67c4a\" class=\"wp-block-heading\" id=\"h-debugging-von-memory-leaks\"><span class=\"ez-toc-section\" id=\"debugging-von-memory-leaks\"><\/span>Debugging von Memory Leaks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"1b334afe-32e4-4b6b-b3e2-870c7991ed45\">Es gibt viele Anwendungen und Tools zum Debuggen von Memory Leaks. Eines der n\u00fctzlichsten Tools ist jedoch bereits direkt im Chrome-Browser enthalten: Der Heap-Profiler. Dieser befindet sich in den Chrome DevTools im Bereich Speicher. Der Heap-Profiler hilft dabei, Speicherprobleme zu untersuchen und herauszufinden, welche Objekte wie viel Speicher verbrauchen.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a04ff5ee7989&quot;}\" data-wp-interactive=\"core\/image\" data-beyondwords-marker=\"41fd903d-b6ab-45cc-91bf-4f2d2563a475\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"969\" height=\"652\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/Heap-Profiler.png\" alt=\"Screenshot vom Heap-Profiler\" class=\"wp-image-55731\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/Heap-Profiler.png 969w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/Heap-Profiler-600x404.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/Heap-Profiler-768x517.png 768w\" sizes=\"auto, (max-width: 969px) 100vw, 969px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Bild vergr\u00f6\u00dfern: Screenshot vom Heap-Profiler\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p data-beyondwords-marker=\"52c74efa-765b-47fc-aefe-9ae7f28d0c6e\">Im Heap-Snapshot werden f\u00fcr jedes Objekt zwei Gr\u00f6\u00dfen angezeigt. Shallow Size und Retained Size. Die flache Gr\u00f6\u00dfe (Shallow Size) zeigt die Gr\u00f6\u00dfe des Arbeitsspeichers, die vom Objekt selbst belegt wird. Die beibehaltene Gr\u00f6\u00dfe (Retained Size) zeigt den Arbeitsspeicher, welcher freigegeben wird, wenn das Objekt und alle seine abh\u00e4ngigen Objekte gel\u00f6scht werden. Dies ist der Fall, sobald das Objekt nicht mehr von der GC-Root erreichbar ist.<\/p>\n\n\n\n<p data-beyondwords-marker=\"fef54bf5-a744-4bec-bc8f-4a5e3c584984\">Es gibt viele verschiedene Arten von GC-Roots. Die meisten dieser Wurzeln sind f\u00fcr den Anwender nicht relevant. F\u00fcr das Debuggen von Speicherlecks in Micro-Frontends sind vor allem zwei Arten von Wurzeln relevant. Das globale Fensterobjekt und der DOM-Baum des Dokuments. Beide Arten von GC-Roots sind pro iFrame vorhanden.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"bfb5a989-96aa-4926-bcf0-0a03286b27f7\" class=\"wp-block-heading\" id=\"h-speicherlecks-mit-dem-heap-profiler-erkennen-und-analysieren\">Speicherlecks mit dem Heap-Profiler erkennen und analysieren<\/h3>\n\n\n\n<p data-beyondwords-marker=\"2eadee0c-b48d-4390-b122-bdcfca933f39\">Speicherprobleme in Micro-Frontends lassen sich relativ einfach mit dem Heap-Profiler identifizieren. Wenn ein Objekt nicht mehr im DOM existiert, aber noch im Speicher gehalten wird, erh\u00e4lt es im Heap-Profiler das Pr\u00e4fix \u201cDetached\u201d. Mit Hilfe des Filters l\u00e4sst sich einfach nach diesen Objekten suchen. Wenn man auf ein Objekt klickt, erh\u00e4lt man unten im Abschnitt \u201cRetainers\u201d einen Baum mit allen Elementen, die eine Referenz auf das Objekt haben und es daher im Speicher halten. Dieser Baum kann verwendet werden, um die Ursache des nicht freigegebenen iFrames zu finden. Der Heap-Profiler bietet au\u00dferdem die M\u00f6glichkeit, direkt in den Quellcode zu schauen. Auf diese Weise ist es sehr einfach, die Stelle im Code zu finden, die den Verweis auf das iFrame enth\u00e4lt.<\/p>\n\n\n\n<p data-beyondwords-marker=\"59d3f507-58cc-4adf-9fb9-b5551fe751c6\">Die folgenden zwei Beispiele zeigen den Heap-Profiler f\u00fcr eine Anwendung, bei der im ersten Fall ein iFrame durch eine Variable und im zweiten Fall durch einen Event Listener im Speicher gehalten wird.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a04ff5ee7d59&quot;}\" data-wp-interactive=\"core\/image\" data-beyondwords-marker=\"1567979f-634a-42c9-872b-cb3987ba2b77\" class=\"aligncenter size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1065\" height=\"652\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/variable.png\" alt=\"Screenshot zeigt iFrame durch eine Variable\" class=\"wp-image-55732\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/variable.png 1065w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/variable-600x367.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/variable-768x470.png 768w\" sizes=\"auto, (max-width: 1065px) 100vw, 1065px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Bild vergr\u00f6\u00dfern: Screenshot zeigt iFrame durch eine Variable\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Das Detached iFrame wird durch die Variable \u201cmyIFrame\u201d im Speicher gehalten. Die Variable befindet sich in der Komponente \u201cMainView.vue\u201d.<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a04ff5ee7fd3&quot;}\" data-wp-interactive=\"core\/image\" data-beyondwords-marker=\"99210f96-3151-4724-9965-597b0797a917\" class=\"aligncenter size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"608\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/eventlistener.png\" alt=\"Screenshot zeigt, wie Detached Window  durch einen Event Listener im Speicher gehalten wird\" class=\"wp-image-55733\" srcset=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/eventlistener.png 1014w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/eventlistener-600x360.png 600w, https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/eventlistener-768x460.png 768w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Bild vergr\u00f6\u00dfern: Screenshot zeigt, wie Detached Window  durch einen Event Listener im Speicher gehalten wird\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Das Detached Window wird durch einen Event Listener im Speicher gehalten. Die Callback-Funktion hei\u00dft \u201conParentResize\u201d und befindet sich in der Komponente \u201cIFrameView.vue\u201d.<\/figcaption><\/figure><\/div>\n\n\n<p data-beyondwords-marker=\"cf101d5f-37ba-47f6-a26d-236395833c98\">Wenn es keinen Verweis von einem anderen iFrame gibt, k\u00f6nnen es die DevTools selbst sein, die Objekte im Speicher halten. Um dies zu vermeiden, ist es sinnvoll, die DevTools w\u00e4hrend der Benutzung der Anwendung geschlossen zu halten und erst dann zu \u00f6ffnen, wenn der Heap-Snapshot tats\u00e4chlich erstellt werden soll. Au\u00dferdem sollte die Browser-Konsole vorher geleert werden. Dies stellt sicher, dass keine Seiteneffekte auftreten.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"15de2b3e-f2d8-45bb-9719-a96053f83f10\" class=\"wp-block-heading\" id=\"h-fazit-zu-memory-leaks\"><span class=\"ez-toc-section\" id=\"fazit-zu-memory-leaks\"><\/span>Fazit zu Memory Leaks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"4e141708-7a2c-483a-8930-b0e23af36935\">Speicherlecks in Micro-Frontends k\u00f6nnen leicht auftreten, wenn sie bei der Entwicklung nicht ber\u00fccksichtigt werden. Mit einem gewissen Grundverst\u00e4ndnis des Garbage Collectors lassen sich diese Probleme jedoch leicht vermeiden. Und sollte es doch einmal zu Speicherlecks kommen, k\u00f6nnen diese mit den richtigen Werkzeugen, wie z.B. den Chrome DevTools, gut analysiert und behoben werden.<\/p>\n\n\n\n<div data-beyondwords-marker=\"ac326264-5db1-49b3-b8e6-0dd9594f1186\" class=\"wp-block-group is-style-cta\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 data-beyondwords-marker=\"d0187c2c-b060-4fd0-baa9-6a4c1efd4e86\" class=\"wp-block-heading\" id=\"h-dein-job-nbsp-in-der-nbsp-entwicklung-bei-d-velop-wartet-auf-dich\">Dein Job&nbsp;in der&nbsp;<strong>Entwicklung bei d.velop<\/strong><br>wartet auf Dich!<\/h3>\n\n\n\n<p data-beyondwords-marker=\"f50a8153-c976-480e-9ea3-8cc33e6b967b\">Entwickeln ist bei uns nicht einfach nur ein Job, sondern eine Leidenschaft. Wir stehen hinter unserem Code, den wir zusammen mit \u00fcber 200 Personen in unseren agilen, crossfunktionalen Teams in der Entwicklung schaffen.<\/p>\n\n\n\n\t<div data-beyondwords-marker=\"c2364a05-41cf-412b-9934-e65fc9864ea3\" class=\"wp-block-buttons\">\n\t\t<div class=\"wp-block-button is-style-outline\">\n\t\t\t<a class=\"wp-block-button__link\" href=\"https:\/\/karriere.d-velop.de\/stellenanzeigen\/?_departments=entwicklung&#038;utm_campaign=Sonstiges+-+d.velop+BLOG+-+01%2F2018&#038;utm_source=intern-blog-ger&#038;utm_medium=blogpost-memory-leaks&#038;utm_content=button\" target=\"_blank\">Offene Stellen entdecken<\/a>\t\t<\/div>\n\t<\/div>\n\n\t<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Micro-Frontends \u00fcbertragen das Konzept der Microservices in die Welt der Frontends. Anstelle eines einzigen Monolithen wird das Frontend in einzelne [&hellip;]<\/p>\n","protected":false},"author":304,"featured_media":55736,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","beyondwords_generate_audio":"1","beyondwords_project_id":"23937","beyondwords_content_id":"5d58389d-7bd3-4522-8c0e-78c05dc6f9f9","beyondwords_preview_token":"5cc5c817-e3ea-40e9-8db6-f14b04869f86","beyondwords_player_content":"","beyondwords_player_style":"","beyondwords_language_id":"","beyondwords_title_voice_id":"","beyondwords_body_voice_id":"","beyondwords_summary_voice_id":"","beyondwords_error_message":"","beyondwords_disabled":"1","beyondwords_delete_content":"","beyondwords_podcast_id":"","beyondwords_hash":"","publish_post_to_speechkit":"","speechkit_hash":"","speechkit_generate_audio":"","speechkit_project_id":"","speechkit_podcast_id":"","speechkit_error_message":"","speechkit_disabled":"","speechkit_access_key":"","speechkit_error":"","speechkit_info":"","speechkit_response":"","speechkit_retries":"","speechkit_status":"","speechkit_updated_at":"","_speechkit_link":"","_speechkit_text":""},"categories":[7],"tags":[6573],"class_list":["post-55704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v25.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Memory Leaks in Micro-Frontend-Architekturen<\/title>\n<meta name=\"description\" content=\"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Memory Leaks in Micro-Frontend-Architekturen\" \/>\n<meta property=\"og:description\" content=\"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\" \/>\n<meta property=\"og:site_name\" content=\"d.velop blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/d.velop.ag\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-13T14:47:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-14T04:49:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/social-sharing-memory-leaks.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Michael Eing\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@d_velop\" \/>\n<meta name=\"twitter:site\" content=\"@d_velop\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Eing\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\"},\"author\":{\"name\":\"Michael Eing\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/56cf7aea8c85fad8580fe39627c9be00\"},\"headline\":\"Memory Leaks in Micro-Frontend-Architekturen\",\"datePublished\":\"2025-05-13T14:47:00+00:00\",\"dateModified\":\"2025-05-14T04:49:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\"},\"wordCount\":1247,\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png\",\"keywords\":[\"Engineering\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\",\"name\":\"Memory Leaks in Micro-Frontend-Architekturen\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png\",\"datePublished\":\"2025-05-13T14:47:00+00:00\",\"dateModified\":\"2025-05-14T04:49:04+00:00\",\"description\":\"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f\",\"breadcrumb\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png\",\"width\":2000,\"height\":666,\"caption\":\"Beitragsbild Memory Leaks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.d-velop.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Memory Leaks in Micro-Frontend-Architekturen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"name\":\"d.velop blog\",\"description\":\"Digitalisierung, Dokumentenmanagement und rund um d.velop\",\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\",\"name\":\"d.velop Gruppe\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"width\":350,\"height\":350,\"caption\":\"d.velop Gruppe\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/d.velop.ag\/\",\"https:\/\/x.com\/d_velop\",\"https:\/\/de.linkedin.com\/company\/d-velop\",\"https:\/\/www.xing.com\/pages\/d-velopag\",\"https:\/\/www.instagram.com\/d.velop_group\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/56cf7aea8c85fad8580fe39627c9be00\",\"name\":\"Michael Eing\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/michael-eing-210x210.jpeg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/michael-eing-210x210.jpeg\",\"caption\":\"Michael Eing\"},\"description\":\"Software Development Engineer\",\"sameAs\":[\"http:\/\/www.d-velop.de\"],\"url\":\"https:\/\/www.d-velop.de\/blog\/author\/michael-eing\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Memory Leaks in Micro-Frontend-Architekturen","description":"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/","og_locale":"de_DE","og_type":"article","og_title":"Memory Leaks in Micro-Frontend-Architekturen","og_description":"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f","og_url":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/","og_site_name":"d.velop blog","article_publisher":"https:\/\/www.facebook.com\/d.velop.ag\/","article_published_time":"2025-05-13T14:47:00+00:00","article_modified_time":"2025-05-14T04:49:04+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/social-sharing-memory-leaks.png","type":"image\/png"}],"author":"Michael Eing","twitter_card":"summary_large_image","twitter_creator":"@d_velop","twitter_site":"@d_velop","twitter_misc":{"Verfasst von":"Michael Eing","Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#article","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/"},"author":{"name":"Michael Eing","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/56cf7aea8c85fad8580fe39627c9be00"},"headline":"Memory Leaks in Micro-Frontend-Architekturen","datePublished":"2025-05-13T14:47:00+00:00","dateModified":"2025-05-14T04:49:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/"},"wordCount":1247,"publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png","keywords":["Engineering"],"articleSection":["Engineering"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/","url":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/","name":"Memory Leaks in Micro-Frontend-Architekturen","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png","datePublished":"2025-05-13T14:47:00+00:00","dateModified":"2025-05-14T04:49:04+00:00","description":"Erfahre, wie Memory Leaks in Micro-Frontends vermieden werden k\u00f6nnen und die Performance verbessert wird. Jetzt lesen \u25b6\ufe0f","breadcrumb":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#primaryimage","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/beitragsbild-memory-leaks.png","width":2000,"height":666,"caption":"Beitragsbild Memory Leaks"},{"@type":"BreadcrumbList","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/memory-leaks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.d-velop.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Memory Leaks in Micro-Frontend-Architekturen"}]},{"@type":"WebSite","@id":"https:\/\/www.d-velop.de\/blog\/#website","url":"https:\/\/www.d-velop.de\/blog\/","name":"d.velop blog","description":"Digitalisierung, Dokumentenmanagement und rund um d.velop","publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.d-velop.de\/blog\/#organization","name":"d.velop Gruppe","url":"https:\/\/www.d-velop.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","width":350,"height":350,"caption":"d.velop Gruppe"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/d.velop.ag\/","https:\/\/x.com\/d_velop","https:\/\/de.linkedin.com\/company\/d-velop","https:\/\/www.xing.com\/pages\/d-velopag","https:\/\/www.instagram.com\/d.velop_group\/"]},{"@type":"Person","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/56cf7aea8c85fad8580fe39627c9be00","name":"Michael Eing","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/michael-eing-210x210.jpeg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/05\/michael-eing-210x210.jpeg","caption":"Michael Eing"},"description":"Software Development Engineer","sameAs":["http:\/\/www.d-velop.de"],"url":"https:\/\/www.d-velop.de\/blog\/author\/michael-eing\/"}]}},"_links":{"self":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/55704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/users\/304"}],"replies":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/comments?post=55704"}],"version-history":[{"count":2,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/55704\/revisions"}],"predecessor-version":[{"id":55744,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/55704\/revisions\/55744"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media\/55736"}],"wp:attachment":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media?parent=55704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/categories?post=55704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/tags?post=55704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}