SPA- och serveråtergivning
- Ämnen:
- Developing
Skapat för:
- Developer
Översikt
Applikationer för en enda sida (SPA) kan ge användaren en rik, dynamisk upplevelse som reagerar och beter sig på välbekanta sätt, ofta precis som med andra applikationer. 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. Serversidorendering (SSR) kan snabba upp den initiala inläsningen av sidan och sedan överföra ytterligare återgivning till klienten.
När SSR ska användas
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:
- SEO: Krävs det fortfarande SSR för att webbplatsen ska kunna indexeras korrekt av sökmotorer som genererar trafik? Kom ihåg att de viktigaste sökmotorcrawlarna nu utvärderar JS.
- Sidhastighet: Ger SSR en mätbar hastighetsförbättring i realtidsmiljöer och ökar den övergripande användarupplevelsen?
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.
Adobe I/O Runtime
Om du du är säker på att ditt projekt kräver SSR, rekommenderas Adobe att använda Adobe I/O Runtime.
Mer information om Adobe I/O Runtime finns på
- https://www.adobe.io/apis/experienceplatform/runtime.html - för en översikt över tjänsten
- https://www.adobe.io/apis/experienceplatform/runtime/docs.html - för detaljerad dokumentation om plattformen
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:
Konfiguration av fjärrinnehållsrenderare
AEM måste veta var det fjärråtergivna innehållet kan hämtas. Oavsett vilken modell du väljer att implementera för SSRmåste du ange AEM hur du får åtkomst till den här fjärrrenderingstjänsten.
Detta görs via RemoteContentRenderer - konfigurationsfabrik 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:
- Mönster för innehållsbana - Reguljära uttryck för att matcha en del av innehållet, om det behövs
- URL för fjärrslutpunkt - URL för slutpunkten som ansvarar för att generera innehållet
- Använd det säkra HTTPS-protokollet om det inte finns i det lokala nätverket.
- Ytterligare begäranderubriker - Ytterligare rubriker som ska läggas till i begäran som skickas till fjärrslutpunkten
- Mönster:
key=value
- Mönster:
- Timeout för begäran - Timeout för fjärrvärdbegäran i millisekunder
AEM kommunikationsflöde
När SSR används arbetsflöde för komponentinteraktion SPA i AEM innehåller en fas i vilken det inledande innehållet i appen genereras av 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.
Adobe I/O Runtime-drivet kommunikationsflöde
Avsnittet AEM kommunikationsflöde beskriver standardimplementeringen och den rekommenderade implementeringen av serversidorendering med avseende på 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 |
---|---|---|
via AEM | AEM hanterar inmatning av bibliotek där det behövs Resurserna behöver bara underhållas på AEM | SPA utvecklare kanske inte känner till |
via Adobe I/O Runtime | Mer bekant för SPA utvecklare | Clientlib-resurser som krävs av programmet, t.ex. CSS och JavaScript, måste göras tillgängliga av AEM utvecklare via allowProxy propertyResurserna måste synkroniseras mellan AEM och Adobe I/O Runtime Om du vill aktivera redigering av SPA kan det behövas en proxyserver för Adobe I/O Runtime |
Planering för SSR
I allmänhet behöver bara en del av ett program återges på serversidan. Det vanliga exemplet är det innehåll som ska visas ovanför vikningen vid den första inläsningen av sidan måste å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 serversidorendering för SPA måste du granska vilka delar av appen som kräver SSR.
Utveckla en SPA med SSR
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 måste du distribuera 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 skiljer sig åt.
SSR för SPA i AEM
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 serversidorendering för Angular- och React-appar. Mer information finns i NPM-dokumentationen för båda ramverken.
- Reagera: https://github.com/adobe/aem-sample-we-retail-journal/blob/master/react-app/DEVELOPMENT.md#enabling-the-server-side-rendering-using-the-aem-page-component
- Angular: https://github.com/adobe/aem-sample-we-retail-journal/blob/master/react-app/DEVELOPMENT.md#enabling-the-server-side-rendering-using-the-aem-page-component
Ett enkelt exempel finns i 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.
Använda Node.js
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.
Renderare för fjärrinnehåll
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
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.
Den här tjänsten används internt av RemoteContentRendererRequestHandlerServlet.
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 ange 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 {}
Konfigurera OSGi-konfigurationen för standardhanteraren
Konfigurationen av standardhanteraren måste konfigureras enligt beskrivningen i avsnittet Konfiguration av fjärrinnehållsrenderare.
Användning av fjärråtergivning av innehåll
Så här hämtar du en servlet och returnerar innehåll som kan injiceras på sidan:
- Kontrollera att fjärrservern är tillgänglig.
- Lägg till ett av följande kodfragment i HTML-mallen för en AEM.
- Du kan också skapa eller ändra OSGi-konfigurationerna.
- Bläddra i webbplatsens innehåll
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'}" />
Krav
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
.
Experience Manager
- Utveckla användarhandboken - översikt
- Introduktion för utvecklare
- Komma igång med utveckling i AEM Sites – WKND-självstudiekurs
- AEM kärnbegrepp
- Struktur för det AEM användargränssnittet med pekskärm
- Koncepten i det AEM användargränssnittet med pekskärm
- AEM - riktlinjer och bästa praxis
- Använda bibliotek på klientsidan
- Developing and Page Diff
- Begränsningar för redigerare
- CSRF Protection Framework
- Datamodellering - David Nueschelers modell
- Bidrar till AEM
- Dokumentskydd
- Referensmaterial
- Skapa en webbplats med alla funktioner (Classic UI)
- Designer och Designer (Classic UI)
- Plattform
- Fusklapp för Sling
- Använda Sling-adaptrar
- Taggbibliotek
- Mallar
- Använda Sling Resource Merger i AEM
- Övertäckningar
- Namnkonventioner
- Skapa en ny GRE-fältkomponent
- Query Builder
- Taggar
- Anpassa sidor som visas av felhanteraren
- Anpassade nodtyper
- Lägga till teckensnitt för grafikåtergivning
- Ansluta till SQL-databaser
- Extern URL
- Skapa och använda jobb för avlastning
- Konfigurerar cookie-användning
- Så här programmässigt kommer du åt AEM JCR
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utveckla rapporter
- eCommerce
- Komponenter
- Kärnkomponenter
- Formatsystem
- Komponenter - översikt
- AEM - Grunderna
- Utveckla AEM
- Utveckla AEM - kodexempel
- JSON-exporterare för innehållstjänster
- Aktivera JSON-export för en komponent
- Bildredigeraren
- Dekoration-tagg
- Använda Dölj villkor
- Konfigurera flera redigerare på plats
- Utvecklarläge
- Testa användargränssnittet
- Komponenter för innehållsfragment
- Hämta sidinformation i JSON-format
- Internationalisering
- Klassiska gränssnittskomponenter
- Headless Experience Management
- Headless och Hybrid with AEM
- Aktivera JSON-export för en komponent
- Enkelsidiga program
- SPA introduktion och genomgång
- SPA WKND - självstudiekurs
- Getting Started with SPA in AEM - React
- Komma igång med SPA i AEM - Angular
- Implementera en React Component for SPA
- SPA djupdykning
- SPA
- Utveckla SPA för AEM
- SPA Blueprint
- SPA
- Dynamisk mappning av modell till komponent för SPA
- SPA
- SPA och Adobe Experience Platform Launch Integration
- SPA- och serveråtergivning
- SPA referensmaterial
- HTTP-API
- Innehållsfragment
- Experience Fragments
- Utvecklingsverktyg
- Utvecklingsverktyg
- AEM Modernization Tools
- Dialogruteredigeraren
- Verktyget Dialogkonvertering
- Utveckla med CRXDE Lite
- Hantera paket med Maven
- Utveckla AEM projekt med Eclipse
- Skapa AEM projekt med Apache Maven
- Utveckla AEM projekt med IntelliJ IDEA
- Så här använder du VLT-verktyget
- Så här använder du proxyserververktyget
- AEM Brackets Extension
- AEM Developer Tools for Eclipse
- AEM
- Personanpassning
- Utöka AEM
- Anpassa sidredigering
- Anpassa konsolerna
- Anpassa vyer av Sidegenskaper
- Konfigurera din sida för gruppredigering av sidegenskaper
- Anpassa och utöka Content Fragments
- Utöka arbetsflöden
- Utöka Multi Site Manager
- Spårning och analys
- Cloud Services
- Skapa anpassade tillägg
- Forms
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utöka Classic UI
- Testning
- Bästa praxis
- Mobil webb