AEM-Site zeigt „Unerwarteter Fehler“ aufgrund von JS-Anwendungs-API-Problemen an
Wenn Ihre öffentliche AEM-Site gelegentlich mit der Meldung „Unerwarteter Fehler“ heruntergeht, kann dies auf Probleme in JavaScript-Anwendungs-API-Komponenten zurückzuführen sein. Starten Sie die Pods neu, um den Service wiederherzustellen, und ersetzen Sie dann veralteten Code durch Sling-Modelle, um die Fehlerbehandlung zu verbessern und so ein erneutes Auftreten zu verhindern.
Beschreibung description
Umgebung
Adobe Experience Manager as a Cloud Service (AEMaaCS) - Sites
Problem/Symptome
Auf der öffentlichen Website kommt es gelegentlich zu Ausfallzeiten, oft wird eine Fehlermeldung angezeigt und bestimmte Seiten können nicht geladen werden. Protokolle verweisen auf Probleme bei der JavaScript-API-Instanziierung und HTTP 500-Fehler.
Zu den Symptomen gehören:
- Unerwarteter Fehler. Wir versuchen, es online zu stellen.Nachricht auf betroffenen Seiten.
- JavaScript-Anwendungs-API-Fehler wie: Kennung linkDropdownLogic.js kann von der Anwendungs-API nicht korrekt instanziiert werden.
- Sling-Ausnahmen aufgrund ungültiger Verweise oder Skriptlogik.
- Einige Seiten können nicht geladen werden, während andere (wie die Homepage) erfolgreich neu geladen werden.
Ursache
Der Ausfall wurde durch einen JavaScript-Fehler in einer benutzerdefinierten Datei verursacht: Kennung _____.js kann von der Anwendungs-API nicht korrekt instanziiert werden.
- Der von ECMAScript verwendete Destrukturierungscode:
for (const [ _, res] of items) - Diese Syntax ist nicht kompatibel mit der Rhino-Engine, die von AEM Sightly verwendet wird.
- Der Fehler trat auf, wenn das Skript versuchte, während der Replikation unvollständige Inhaltsstrukturen zu verarbeiten.
Warum es nur auf einem Pod passiert ist
Obwohl alle Publishing-Pods denselben Code hatten, schlug nur einer aus folgenden Gründen fehl:
- Unvollständige Inhaltsreplikation - Der Pod befand sich in einem temporären Zustand mit teilweise repliziertem Inhalt.
- Unsichere Iteratorbehandlung - Der JS-Code konnte keine fehlenden oder unvollständigen Datenstrukturen verarbeiten.
- Ressourcenerschöpfung - Die Fehlerschleife verbrauchte Systemressourcen, was zu einem Absturz führte.
- Keine automatische Wiederherstellung - Der Pod konnte aufgrund der anhaltenden Ressourcenerschöpfung nicht ohne manuellen Neustart wiederhergestellt werden.
Technische Insight
- Engine-Einschränkung: Die Rhino JS-Engine unterstützt keine Destrukturierung auf Java-Iteratoren.
- Code-Verhalten: Kann unter normalen Bedingungen funktionieren, schlägt jedoch unter Stress oder partiellen Daten fehl.
- Impact: Ein Pod trat in eine Fehlerschleife ein, während andere normal weiterliefen.
Auflösung resolution
So beheben Sie das Problem mit der JavaScript-Anwendungs-API:
- Starten Sie alle Publishing-Pods neu, um die Umgebung vorübergehend zu stabilisieren. Dadurch werden die HTTP 500-Fehler gelöscht und die Site-Verfügbarkeit wiederhergestellt.
- Überprüfen Sie anschließend die JavaScript-Modellklassen, die Instanziierungsfehler verursachen. Ersetzen Sie veraltete JavaScript-Use-API-Komponenten durch Java-basierte Sling-Modelle, und stellen Sie sicher, dass alle Klassen, auf die verwiesen wird, über geeignete Zugriffsmethoden verfügen.
- Aktualisieren Sie den problematischen Code, um die Verwendung der ECMAScript-Zerstörung in Java-Iteratoren zu vermeiden. Verwenden Sie stattdessen standardmäßige Java-Iteratormuster. Fügen Sie Null-Prüfungen und Fehlerbehandlung hinzu, um unvollständige Inhaltsstrukturen sicher zu verwalten.
- Fügen Sie try/catch-Blöcke in Ihren JavaScript-API-Skripten hinzu, um einen vollständigen Fehler zu verhindern, wenn Inhalte fehlen. Entwerfen Sie Komponenten, um sie elegant zu reduzieren und kaskadierende Fehler zu vermeiden.
- Überprüfen Sie abschließend die Komponentenabhängigkeiten und erwägen Sie die Verwendung des zwischengespeicherten Fallback-Inhalts für wichtige Elemente wie die Navigation. Leistungsschalter für Komponenten implementieren, die auf externe Dienste angewiesen sind.
Verwandtes Lesen
Veraltete und entfernte Funktionen | Adobe Experience Manager