SPA Editor är den rekommenderade lösningen för projekt som kräver SPA ramverksbaserad klientåtergivning (till exempel React eller Angular).
Adobe Experience Manager (AEM) 6.5.1.0 eller senare krävs för att använda de återgivningsfunktioner på SPA serversidan som beskrivs i det här dokumentet.
Single page-applikationer (SPA) kan ge användaren en rik, dynamisk upplevelse som reagerar och beter sig på välbekanta sätt, ofta precis som ett systemspecifikt program. Detta uppnås genom att klienten förlitar sig på att läsa in innehållet framtill och sedan göra den tunga hanteringen av användarinteraktionen och på så sätt minimera mängden kommunikation som krävs mellan klienten och servern, vilket gör appen mer reaktiv.
Detta kan dock leda till längre inledande inläsningstider, särskilt om SPA är stor och har mycket innehåll. För att optimera inläsningstiden kan en del av innehållet återges på serversidan. Med SSR-återgivning (server-side rendering) går sidans initiala belastning snabbare och skickar sedan vidare återgivning till klienten.
SSR krävs inte för alla projekt. Även om AEM stöder JS SSR fullt ut för SPA rekommenderar Adobe inte att man implementerar det systematiskt för varje projekt.
När du beslutar dig för att implementera SSR måste du först uppskatta vilken ytterligare komplexitet, insats och kostnad som SSR innebär på ett realistiskt sätt för projektet, inklusive det långsiktiga underhållet. En SSR-arkitektur bör endast väljas när mervärdet klart överstiger de uppskattade kostnaderna.
SSR ger vanligtvis ett visst värde när det finns ett tydligt"ja" till någon av följande frågor:
Endast när minst en av dessa två frågor besvaras med ett tydligt"ja" för ditt projekt rekommenderar Adobe att SSR implementeras. I följande avsnitt beskrivs hur du gör detta med Adobe I/O Runtime.
Om du är säkra på att ditt projekt kräver SSR, rekommenderas Adobe att använda Adobe I/O Runtime.
Mer information om Adobe I/O Runtime finns i:
I följande avsnitt beskrivs hur Adobe I/O Runtime kan användas för att implementera SSR för dina SPA i två olika modeller:
Adobe rekommenderar en separat Adobe I/O Runtime-arbetsyta per miljö (stage, prod, testing osv.). Detta möjliggör typiska mönster för systemutvecklingscykler (SDLC) med olika versioner av ett enda program som distribueras till olika miljöer. Se dokumentet CI/CD för Project App Builder-program för mer information.
En separat arbetsyta behövs inte per instans (författare, publicering) såvida det inte finns skillnader i körtidsimplementeringen per instanstyp.
AEM måste veta var det fjärråtergivna innehållet kan hämtas. Oavsett vilken modell du väljer att implementera för SSR,måste du ange AEM hur du får åtkomst till den här fjärråtergivningstjänsten.
Detta görs via RemoteContentRenderer - Configuration Factory OSGi-tjänst. Sök efter strängen RemoteContentRenderer i webbkonsolens konfigurationskonsol på http://<host>:<port>/system/console/configMgr
.
Följande fält är tillgängliga för konfigurationen:
key=value
Oavsett om du väljer att implementera AEM kommunikationsflöde eller Adobe I/O Runtime-styrt flöde, du måste definiera en fjärrkonfiguration för innehållsåtergivning.
Den här konfigurationen måste också definieras om du väljer att använder en anpassad Node.js-server.
Den här konfigurationen använder Remote Content Renderer, som har ytterligare alternativ för tillägg och anpassning.
När SSR används arbetsflöde för komponentinteraktion SPA i AEM innehåller en fas där det inledande innehållet i appen genereras på Adobe I/O Runtime.
Webbläsaren begär SSR-innehåll från AEM.
AEM skickar modellen till Adobe I/O Runtime.
Adobe I/O Runtime returnerar det genererade innehållet.
AEM visar HTML som returneras av Adobe I/O Runtime via HTML-mallen för backend-sidkomponenten.
I det föregående avsnittet beskrivs standardimplementeringen och den rekommenderade implementeringen av serversidesåtergivning för SPA i AEM, där AEM utför startsvällning och -visning av innehåll.
Alternativt kan SSR implementeras så att Adobe I/O Runtime ansvarar för startkomponenten, vilket effektivt kan vända kommunikationsflödet.
Båda modellerna är giltiga och stöds av AEM. Man bör dock beakta fördelarna och nackdelarna med var och en av modellerna innan man implementerar en viss modell.
Bootstrap | Fördelar | Nackdelar |
---|---|---|
genom AEM |
|
|
via Adobe I/O Runtime |
|
|
Endast en del av ett program får återges på serversidan. Det vanliga exemplet är det innehåll som visas ovanför vikningen vid den första inläsningen av sidan återges på serversidan. Detta sparar tid genom att leverera till klienten, som redan har återgett innehåll. När användaren interagerar med SPA återges det extra innehållet av klienten.
När du funderar på att implementera serversidesåtergivning för SPA kan du kontrollera vilka delar av programmet som behövs.
SPA kan återges av klienten (i webbläsaren) eller serversidan. Webbläsaregenskaper som fönsterstorlek och plats finns inte på den återgivna serversidan. SPA bör därför vara isomorfa, utan att man vet var de kommer att återges.
Om du vill använda SSR distribuerar du koden i AEM och på Adobe I/O Runtime, som ansvarar för återgivningen på serversidan. Den mesta koden blir densamma, men serverspecifika åtgärder är olika.
SSR för SPA i AEM kräver Adobe I/O Runtime, vilket krävs för återgivning av programinnehållsserversidan. I programmets HTML anropas en resurs på Adobe I/O Runtime för att återge innehållet.
Precis som AEM stöder ramverken Angular och React SPA direkt, stöds även serversidesrendering för Angular- och React-appar. Mer information finns i NPM-dokumentationen för båda ramverken.
Ett enkelt exempel finns på App för återförsäljningsjournal. Det återger hela programserversidan. Även om detta inte är ett verkligt exempel visar det vad som behövs för att implementera SSR.
The App för återförsäljningsjournal är endast till för demonstrationsbruk och använder därför Node.js som ett enkelt exempel i stället för den rekommenderade Adobe I/O Runtime. Använd inte det här exemplet för något projektarbete.
Alla AEM ska använda AEM Project Archettype, som stöder SPA projekt med React eller Angular och använder SPA SDK.
Adobe I/O Runtime rekommenderas för implementering av SSR för SPA i AEM.
För premesis AEM-instanser är det också möjligt att implementera SSR med en anpassad Node.js-instans på samma sätt som beskrivs ovan. Även om detta stöds av Adobe rekommenderas det inte.
Node.js stöds inte för instanser med värdbaserade AEM i Adobe.
Om SSR måste implementeras via Node.js rekommenderar Adobe en separat Node.js-instans för varje AEM (författare, publicering, scen osv.).
The Konfiguration av fjärrinnehållsrenderare som krävs för att använda SSR tillsammans med SPA i AEM går in i en mer generaliserad renderingstjänst som kan byggas ut och anpassas efter dina behov.
RemoteContentRenderingService
är en OSGi-tjänst som hämtar innehåll som återges på en fjärrserver, till exempel från Adobe I/O. Innehållet som skickas till fjärrservern baseras på den begärandeparameter som skickas.
RemoteContentRenderingService
kan injiceras genom beroendeinvertering till antingen en anpassad Sling-modell eller servlet när ytterligare innehållsmanipulering krävs.
Tjänsten används internt av RemoteContentRendererRequestHandlerServlet.
The RemoteContentRendererRequestHandlerServlet
kan användas för att ställa in konfigurationen för begäran programmatiskt. DefaultRemoteContentRendererRequestHandlerImpl
, den medföljande standardimplementeringen av begäranhanteraren, gör att du kan skapa flera OSGi-konfigurationer för att mappa en plats i innehållsstrukturen till en fjärrslutpunkt.
Implementera RemoteContentRendererRequestHandler
gränssnitt. Var noga med att ställa in Constants.SERVICE_RANKING
egenskapen component till ett heltal som är högre än 100, vilket är rankningen för DefaultRemoteContentRendererRequestHandlerImpl
.
@Component(immediate = true,
service = RemoteContentRendererRequestHandler.class,
property={
Constants.SERVICE_RANKING +":Integer=1000"
})
public class CustomRemoteContentRendererRequestHandlerImpl implements RemoteContentRendererRequestHandler {}
Konfigurationen av standardhanteraren måste konfigureras enligt beskrivningen i avsnittet Konfiguration av fjärrinnehållsrenderare.
Så här hämtar du en servlet och returnerar innehåll som kan injiceras på sidan:
Vanligtvis är HTML-mallen för en sidkomponent huvudmottagaren för en sådan funktion.
<sly data-sly-resource="${resource @ resourceType='cq/remote/content/renderer/request/handler'}" />
Servlets använder Sling Model Exporter för att serialisera komponentdata. Som standard är båda com.adobe.cq.export.json.ContainerExporter
och com.adobe.cq.export.json.ComponentExporter
stöds som Sling Model-kort. Om det behövs kan du lägga till klasser som begäran ska anpassas till med RemoteContentRendererServlet
och implementera RemoteContentRendererRequestHandler#getSlingModelAdapterClasses
. Ytterligare klasser måste utöka ComponentExporter
.