Skip to main content

Lärdom

Förklaring av klientsidesbaserad testning och personalisering

En djupgående analys av de viktigaste tekniska övervägandena vid implementering av A/B-tester och personaliseringskampanjer på klientsidan.

John Peeler profile photo

John Peeler

Director,

Enterprise Solution Engineering,

Mastercard

Det här inlägget är en del av en serie i flera delar om olika tekniska metoder för A/B-testning och personalisering. I den här artikeln ger jag en djupgående analys av de viktigaste sakerna att tänka på när man implementerar experiment och kampanjer på klientsidan.

 

Så fungerar klientsidesanpassning och personalisering

Tillvägagångssättet på klientsidan är den överlägset vanligaste lösningen som används på marknaden i dag. Med det här tillvägagångssättet genereras alla tester och upplevelser från klientsidans webbläsare med hjälp av Javascript. 

Vad är egentligen klientsidesrendering?

När en leverantör ber dig att placera deras Javascript-tagg(ar) i HTML-koden på alla sidor på din webbplats kan Javascript-baserade test- och personaliserings-SDK:er sedan injiceras på webbplatsen. Tillsammans med sina kärn-SDK:er bäddar leverantörer in kodrepresentationer av de kampanjer som du definierar i deras användargränssnitt. När taggarna väl finns på din webbplats kan leverantören köra all nödvändig logik för att testa och personalisera innehållet på dina sidor med hjälp av klientsides-Javascript.

 

Klientbaserat tillvägagångssätt

Översikt

Använder Javascript som metod för att testa och personalisera webbplatsinnehåll. Därför utförs all dynamisk åtgärd på klientsidan, direkt från webbläsaren.

Var ändras innehållet?

På klientsidan

Fördelar

Snabbt och enkelt att göra ändringar
Enkelt för intressenter i företaget att använda
Snabbare implementering

Nackdelar

En mindre ökning av sidans storlek och laddningstid
Mindre kontroll för utvecklare
Integreras inte väl med it-/webbutrullningsramverk

 

Sidans modifieringsteknik är densamma hos alla leverantörer – en kodstump i SDK:n utför en åtgärd baserat på det önskade användningsfallet. 

Några exempel på rendering på klientsidan:

  • Identifierar ett eller flera element på sidan via DOM-selektorer och kör sedan JavaScript-kod för att ändra dessa element. Exempel: dölj, ta bort, flytta, duplicera, ändra attribut, ändra CSS-format med mera
  • Identifierar ett eller flera element på sidan via DOM-selektorer och kör sedan JavaScript-kod för att ersätta elementet eller elementen med nytt innehåll
  • Identifierar ett eller flera element på sidan via DOM-väljare och exekverar sedan Javascript-kod för att infoga nytt innehåll före eller efter elementet/elementen
  • Injekterar globala CSS-stilar på sidan och ändrar stilen på elementen på sidan
  • Injicerar annan Javascript-kod på sidan, som kan användas för en mängd olika öppna användningsfall (t.ex. infoga ett tredjepartsbibliotek, göra en AJAX-begäran, anropa ett API osv.)

Konfigurationsalternativ för klientsides- och personaliseringstestning

För att ge mer exakt kontroll över webbplatsens laddnings- och renderingsflöde erbjuder de flesta leverantörer dessutom en rad konfigurationer för att mer granulärt optimera laddnings- och körningsbeteendet för sina Javascript-SDK:er. 

Några av dessa inkluderar:

1) Optimering av nätverksleveransen för JavaScript-SDK:n

CDNs: Nästan alla leverantörer av testning och personalisering på klientsidan tillhandahåller sina Javascript-filer via innehållsleveransnätverk (CDN). CDN-nätverk optimerar nätverksleveransen av Javascript-filerna genom att spegla filerna på olika serverplatser och sedan optimera leveransvägarna när en användare gör en begäran. Vissa leverantörer gör det också möjligt att lagra deras filer på ett eget utvalt CDN, vilket ger era IT-team bättre kontroll över leverans och inläsning.

DNS-förhämtning: Eftersom de flesta leverantörer distribuerar sina Javascript-filer från ett annat värdnamn än din webbplats kan det ta lite extra tid för webbläsaren att matcha begäran om Javascript SDK-filer mot domännamnsservern (DNS). För att påskynda DNS-matchningsprocessen rekommenderar vissa leverantörer att förhämtningstaggar placeras före deras Javascript-taggar.

2) Optimera inläsning och rendering för JavaScript-SDK:n

Taggplacering: För att erbjuda bästa möjliga upplevelse för era användare rekommenderas det nästan alltid att du placerar en leverantörs Javascript-taggar så högt upp i HTML-koden som möjligt, helst i head-sektionen. Detta gör att webbläsaren snabbt kan läsa in taggarna, vilket minimerar fördröjningen mellan att en sidas HTML-innehåll läses in och att leverantörens SDK gör sina ändringar på sidan. Om denna fördröjning inte minimeras resulterar det i en så kallad flimmer-effekt (flicker) – när en användare ser det serverrenderade innehållet, vanligtvis under millisekunder (eller, i värsta fall, sekunder), innan leverantörens SDK ändrar innehållet. Denna flimmereffekt anses allmänt vara skadlig för användarupplevelsen, eftersom den ofta förvirrar och frustrerar besökare.

Synkron inläsning: Som standard rekommenderar de flesta leverantörer att du ställer in att deras Javascript-taggar ska läsas in synkront för att undvika flimmer. Synkront inlästa Javascript-block hindrar webbläsaren från att rendera HTML-innehåll på taggens plats i HTML-koden. Vid en första anblick kan detta verka oönskat ur ett sidinläsningsperspektiv, men problem med sidinläsning är inte ett stort bekymmer för större leverantörer. Vanligtvis används en rad tekniklösningar, som CDN-användning, små filstorlekar, kodminimering, säkert utformad kod för att förhindra att sidan kraschar med mera, för att säkerställa mycket snabb och pålitlig filinläsning. Dessutom, som nämnts ovan, anser de flesta UX-designers att de försumbara skillnaderna i laddningstid för optimerad synkront inladdad Javascript är en värdig avvägning för att minimera flimmereffekter.

Asynkron inläsning: Du kan också ställa in en leverantörs skripttaggar så att de läses in asynkront. Asynkron inläsning förhindrar att webbläsaren blockeras vid rendering när den läser in leverantörens skript. Med andra ord kommer webbläsaren att rendera HTML-innehåll parallellt med inläsningen av leverantörens Javascript-filer. Fördelen med asynkron inläsning är att det inte påverkar sidans laddtider alls, men detta kommer till priset av en ökad risk för flimmer. För att minska detta kan leverantörer använda vissa stil- och renderingstrick för att förhindra att ett element visas förrän efter att leverantörens SDK har modifierat det. Till exempel kan du använda CSS för att dölja elementet initialt och sedan visa det igen när leverantörens SDK har laddats färdigt. Som ett annat exempel kan du vanligtvis undvika flimmer helt om dina test- och personaliseringsscenarier inte finns ovanför vecket, eftersom leverantörens JavaScript-SDK på de flesta anslutningar har lästs in när en användare hamnar nedanför vecket.

Vilken: synkron vs. asynkron? I slutändan finns det inget universellt rätt eller fel svar när det gäller synkron versus asynkron inläsning – det lämpliga valet beror på dina affärsprioriteringar. Om det är högsta prioritet att undvika flimmer bör synkron inläsning användas. Om det är högsta prioritet att minimera sidans inläsningstid bör asynkron inläsning användas. Med det sagt är effekterna på inläsningstiden och andra risker förknippade med synkron inläsning tillräckligt obetydliga vid användning av en stor leverantör för att synkron inläsning ska vara ett lämpligt tillvägagångssätt för de flesta webbplatser. 

Som en fusklapp för denna diskussion kan du titta på följande tabell:

 

Metoder för inläsning av skript på klientsidan

 

Synkron

Asynkron

Asynkront med åtgärdande

Översikt

Javascript-taggar placeras överst i HTML-koden vid synkron inläsning

JavaScript-taggar placeras högst upp i HTML-koden vid asynkron inläsning. Alternativt kan taggarna placeras i en asynkron tagghanterare

Samma som asynkront, med tillägg av CSS- eller Javascript-kod för att dölja de berörda elementen

Fördelar

·        Reliable user experience without flicker

·        Bra för det som syns utan att man behöver skrolla

· Tester, personaliseringskampanjer och spårningsfunktioner garanteras att köras tillsammans med sidinnehållet

· Snabbare sidinläsning, ingen risk för att sidrendering blockeras av en felaktig leverantör

·        Samma som asynkron inläsning, med mindre risk för flimmer

Nackdelar

· En mindre ökning av sidladdningstiden, risk för att sidrendering blockeras av en felaktig leverantör

· Hög risk för flimmer

· Fungerar inte ovanför brytpunkten

·        Tester, personanpassningskampanjer och spårningsfunktioner kanske inte körs om användaren lämnar sidan snabbt

· Mindre flimmerrisk, men vissa sudelement kan ändå verka flytta på sig när test- och personaliseringsinnehållet har renderats

·        Tester, personanpassningskampanjer och spårningsfunktioner kanske inte körs om användaren lämnar sidan snabbt

 

Caching: De flesta leverantörer använder smarta cachelagringstekniker på sina Javascript SDK-filer, både på servernivå och webbläsarnivå. Cachelagring gör att leverantörens SDK i praktiken endast laddas ner vid den första sidvisningen eftersom SDK-filerna därefter cachelagras lokalt i webbläsaren. Det är dock värt att ha i åtanke att cacheminnets utgångsdatum vanligtvis är inställda på ett lågt antal minuter, vilket gör att du kan göra ändringar i dina test- och personaliseringskampanjer och skicka ut dessa ändringar till användarna i nära realtid. När cacheminnets utgångsdatum har passerat måste användarens webbläsare ladda ner leverantörens SDK på nytt vid nästa sidbegäran. Med det sagt är sessionstiderna för de allra flesta webbplatser inte tillräckligt långa för att detta ska vara ett märkbart problem för de flesta användare.

3) Minska filstorleken för JavaScript SDK

Leverantörer använder också en rad olika tekniker för att minska filstorleken på sina skript, till exempel minimering, borttagning av inbäddade bibliotek som inte är nödvändiga samt dynamisk borttagning av gamla eller oanvända experiment och personaliseringskampanjer med mera.

Användning av tekniker för lat inläsning

Utöver att enbart minska filstorlekarna implementerar vissa leverantörer tekniker för lazy loading (fördröjd inläsning) på dina test- och personalkampanjer så att endast de absolut nödvändiga kampanjerna läses in med SDK:t. I praktiken är de nödvändiga kampanjerna vanligtvis de som visas "above-the-fold" (synliga utan scrolling) på de mest populära sidorna på din webbplats. Andra kampanjer, som de som körs "below-the-fold" (nedanför den synliga ytan) eller utlöses av specifika händelser, markeras för lazy load. Denna användning av lazy loading minskar filstorlekarna och fördröjer nedladdningar till senare nätverksförfrågningar med mindre datamängder.

5) Konfigurera Javascript SDK för integrering med webbplatser som använder klientsidesrendering

Klientbaserad rendering har Become alltmer populärt under de senaste åren, lett av bibliotek och ramverk som React och Angular. Eftersom de flesta A/B-tester och omnichannel-personaliseringsplattformar utvecklades före framväxten av klientbaserad rendering saknar de flesta leverantörer fortfarande bra stöd för klientbaserat renderade webbplatser (per början av 2020). 

För de få leverantörer som faktiskt erbjuder ”support” beskrivs deras tillvägagångssätt mer korrekt som tillfälliga lösningar snarare än robusta lösningar, och de har vanligtvis många funktionella begränsningar. 

Vanliga tillvägagångssätt omfattar:

  • Utökade implementeringar som främjar aktivering av särskilda spårningsfunktioner på leverantörens SDK i takt med att sidans kontext ändras, vilket gör att leverantören kan hålla koll på webbplatsens livscykel. Detna tillvägagångssätt ger utvecklare full flexibilitet gällande när leverantörens SDK utför åtgärder, till priset av ökat implementeringsarbete och löpande underhållskod.
  • Användning av klientsidans DOM-övervakningsfunktioner som Mutation Observer, vilket gör att leverantören automatiskt kan hålla reda på sidändringar utan att det krävs så mycket extra implementeringsarbete från teamets sida. Användningen av sådana funktioner är dock oftast inte robust; DOM-övervakningen kan vara opålitlig, särskilt om din webbplats har ett mer komplicerat renderingsflöde. 

SEO-påverkan för client-side rendering

Eftersom sökmotortrafik är en av de viktigaste besökstiderna för de flesta webbplatser vore det olämpligt att inte diskutera de potentiella riskerna med att använda dynamiskt JavaScript-genererat innehåll vid A/B-testning och optimering. Det är ett så viktigt ämne att vi har skrivit ett helt blogginlägg om SEO-påverkan av klientbaserad rendering. Där beskriver vi en serie experiment som vi genomförde, vilket till slut visade att Google faktiskt känner igen och indexerar dynamiskt, JavaScript-baserat innehåll.

Finns det någon skillnad i klientsidesprestanda mellan leverantörer?

När det gäller att jämföra den tekniska prestandan hos plattformar för klientsidestestning och personalisering är skillnaden mycket liten mellan dem. Alla klientsidesmetoder använder Javascript för att utföra sina funktioner, med taggar insatta i sidan enligt beskrivningen i de föregående avsnitten. 

Dessutom har branschen mognat till den grad att alla större leverantörer på området erbjuder liknande optimerings- och konfigurationsalternativ när det gäller Javascript-taggarna. De enda större skillnaderna i teknisk implementering mellan olika leverantörer brukar ligga antingen i data spårnings- och insamlingsmetoder eller i hur integrationen hanteras med ramverk för rendering på klientsidan. När man jämför leverantörer är det därför mycket viktigare att jämföra plattformarnas kärnfunktioner samt deras servicemodeller än prestanda.

 

Fortsatt läsning: testning och personalisering på serversidan

Baserat på vår erfarenhet av att arbeta med kunder under de senaste 8 åren är detta de viktigaste tekniska aspekterna att tänka på när det gäller testning och personalisering på klientsidan. I nästa del av denna bloggserie kommer vi att utföra en liknande analys av testning och personalisering på serversidan.

 

Kontakta säljavdelningen

Prata med en expert för att ta reda på hur Mastercard kan göra din verksamhet ännu bättre med hjälp av våra produkter och tjänster.

Mastercard