Gerenciar cintilação
Ao tentar renderizar o conteúdo de personalização, o SDK precisa garantir que não haja cintilação. A cintilação, também chamada de FOOC (Flash do conteúdo original), ocorre quando um conteúdo original é exibido brevemente antes de a alternativa aparecer durante o teste/personalização. O SDK tenta aplicar estilos CSS a elementos da página, a fim de garantir que esses elementos estejam ocultos até que o conteúdo de personalização seja renderizado com êxito.
A maneira como você gerencia a cintilação depende de você implantar o SDK da Web de forma síncrona ou assíncrona. Verifique a marca <head>
onde você implantou o alloy.js
ou o carregador de marcas. A presença do atributo async
na marca <script>
determina se o SDK da Web é carregado de forma assíncrona.
<!-- This tag loads synchronously -->
<script src="https://assets.adobedtm.com/[...]/launch-example.min.js"></script>
<!-- This tag loads asynchronously -->
<script src="https://assets.adobedtm.com/[...]/launch-example.min.js" async></script>
<!-- This library loads synchronously -->
<script src="https://cdn1.adoberesources.net/alloy/2.14.0/alloy.min.js"></script>
<!-- This library loads asynchronously -->
<script src="https://cdn1.adoberesources.net/alloy/2.14.0/alloy.min.js" async></script>
Gerenciar cintilação para implantações síncronas
O gerenciamento de cintilação síncrona é dividido em três fases:
- Pré-ocultação
- Pré-processando
- Renderização
Durante a fase de pré-ocultação, o SDK usa a propriedade de configuração prehidingStyle
para criar uma marca de estilo HTML e anexá-la ao DOM para garantir que as seções desejadas da página estejam ocultas. Se não tiver certeza de quais partes da página serão personalizadas, é recomendável definir prehidingStyle
como body { opacity: 0 !important }
. Isso garante que a página inteira fique oculta. No entanto, isso tem o lado negativo de levar ao pior desempenho de renderização da página relatado por ferramentas como Lighthouse, Testes de página da Web etc. Para ter o melhor desempenho de renderização da página, é recomendável definir prehidingStyle
como uma lista de elementos de contêiner que contenham as partes da página que serão personalizadas.
Supondo que você tenha uma página de HTML como a abaixo e saiba que somente os elementos de contêiner bar
e bazz
serão personalizados:
<html>
<head>
</head>
<body>
<div id="foo">
Foo foo foo
</div>
<div id="bar">
Bar bar bar
</div>
<div id="bazz">
Bazz bazz bazz
</div>
</body>
</html>
Em seguida, o prehidingStyle
deve ser definido como algo como #bar, #bazz { opacity: 0 !important }
.
Depois que o SDK receber o conteúdo personalizado do servidor, a fase de pré-processamento será iniciada. Durante essa fase, a resposta é pré-processada, garantindo que os elementos que precisam conter conteúdo personalizado estejam ocultos. Depois que esses elementos estiverem ocultos, a tag de estilo HTML que foi criada com base na opção de configuração prehidingStyle
será removida e o corpo do HTML ou os elementos de contêiner ocultos serão exibidos.
Depois que todo o conteúdo de personalização for renderizado com êxito, ou se houver algum erro, a fase de renderização será iniciada. Todos os elementos ocultos anteriormente são mostrados para garantir que não haja elementos ocultos na página ocultos pelo SDK.
Gerenciar cintilação para implantações assíncronas
A recomendação é sempre carregar o SDK de forma assíncrona para obter o melhor desempenho de renderização da página. No entanto, isso tem algumas implicações para a renderização de conteúdo personalizado. Quando o SDK é carregado de forma assíncrona, é necessário usar o trecho pré-ocultação. O trecho pré-ocultação deve ser adicionado antes do SDK na página do HTML. Este é um exemplo de trecho que oculta o corpo inteiro:
<script>
!function(e,a,n,t){
if (a) return;
var i=e.head;if(i){
var o=e.createElement("style");
o.id="alloy-prehiding",o.innerText=n,i.appendChild(o),
setTimeout(function(){o.parentNode&&o.parentNode.removeChild(o)},t)}}
(document, document.location.href.indexOf("adobe_authoring_enabled") !== -1, "body { opacity: 0 !important }", 3000);
</script>
Para garantir que o corpo da HTML ou os elementos do contêiner não fiquem ocultos por um longo período de tempo, o trecho pré-ocultação usa um temporizador que, por padrão, remove o trecho após 3000
milissegundos. O tempo máximo de espera de 3000
milissegundos. Se a resposta do servidor tiver sido recebida e processada antes, a tag de estilo HTML pré-ocultação será removida o mais rápido possível.