Saltar al contenido principal

Implementación con SvelteKit

Integre Kameleoon Web Experimentation con protección anti-flicker y ejecute el script engine.js después de la hidratación de SvelteKit. Esta configuración garantiza un rendimiento óptimo, estabilidad visual y compatibilidad con el ciclo de vida de renderizado de SvelteKit.

Acceda a la integración SvelteKit lista para producción

Acceda al repositorio listo para producción aquí: https://github.com/Kameleoon/setup-engine-sveltekit Antes de empezar, sustituya el valor del sitecode en src/lib/integrations/Kameleoon/sitecode.ts.

Dominio del script

El dominio de su script de Kameleoon puede diferir entre proyectos. En función de cuándo haya creado su proyecto, sus scripts pueden residir en kameleoon.eu o en kameleoon.io. Utilice siempre el dominio que se muestra para su proyecto en la aplicación Kameleoon.

Visión general

  1. Precargue el motor de Kameleoon: Asegúrese de que el navegador descargue y almacene en caché el motor cuanto antes.
  2. Aplique CSS anti-flicker: Oculte el contenido hasta que el motor esté listo para evitar saltos de diseño.
  3. Ejecute el motor después de la hidratación: Ejecute el script tras la hidratación de SvelteKit para evitar discrepancias.

Componentes

La integración utiliza dos componentes para garantizar una carga fluida y evitar el flickering durante la hidratación.

1. Componente del servidor

El componente:
  • Inyecta CSS anti-flicker durante el SSR para evitar parpadeos en la UI.
  • Precarga el archivo engine.js para que la descarga comience lo antes posible.
<script lang="ts">
  import { SITECODE_SRC } from './sitecode';
</script>

<svelte:head>
  <link
    rel="preload"
    href={SITECODE_SRC}
    as="script"
    fetchpriority="high"
  />

  <style id="kameleoonLoadingStyleSheet">
    html::after {
      content: '';
      position: fixed;
      inset: 0;
      background: #fff;
      z-index: 2147483647;
    }
  </style>
</svelte:head>
Consulte KameleoonHead.svelte en GitHub.

2. Componente del cliente

El componente:
  • Elimina los estilos anti-flicker después de la hidratación.
  • Carga dinámicamente el script engine.js de Kameleoon.
  • Garantiza que el script se cargue sin bloquear el renderizado.
<script lang="ts">
  import { onMount } from 'svelte';
  import { SITECODE_SRC } from './sitecode';

  // custom value
  const kameleoonLoadingTimeout = 500;

  function removeAntiflickerStyles(): void {
    window.kameleoonQueue = window.kameleoonQueue || [];
    window.kameleoonStartLoadTime = Date.now();

    window.kameleoonDisplayPage = (fromEngine?: boolean): void => {
      if (!fromEngine) {
        window.kameleoonTimeout = true;
      }
      document
        .getElementById('kameleoonLoadingStyleSheet')
        ?.remove();
    };

    window.kameleoonDisplayPageTimeOut = setTimeout(
      window.kameleoonDisplayPage,
      kameleoonLoadingTimeout
    );
  }

  function loadEngine(): void {
    if (document.getElementById('kameleoon-engine')) return;

    const script = document.createElement('script');
    script.src = SITECODE_SRC;
    script.async = true;
    script.id = 'kameleoon-engine';
    document.head.appendChild(script);
  }

  
  // Execute Kameleoon after hydration
  onMount(() => {
    removeAntiflickerStyles();
    loadEngine();
  });
</script>
Consulte KameleoonHydrationReady.svelte en GitHub.
El timeout anti-flicker predeterminado es de 750 ms. Ajuste kameleoonLoadingTimeout si es necesario.

Uso en RootLayout

Combine ambos componentes en su layout:
<script lang="ts">
  import KameleoonHead from '$lib/integrations/Kameleoon/KameleoonHead.svelte';
  import KameleoonHydrationReady from '$lib/integrations/Kameleoon/KameleoonHydrationReady.svelte';
</script>

<!-- SSR head injection -->
<KameleoonHead />

<!-- Optional: other head tags -->
<svelte:head>
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" />
</svelte:head>

<!-- Client bootstrap after hydration -->
<KameleoonHydrationReady />

<slot />
Consulte layout.svelte en GitHub.

Conclusiones clave

  • Proteja contra el flickering en SSR.
  • Utilice una ejecución de script consciente de la hidratación.
  • Cargue el motor de forma asíncrona.
  • Utilice un timeout de respaldo para mayor fiabilidad.
  • Evite scripts bloqueantes.
  • Compatible con layouts de SvelteKit, SSR y enrutamiento del lado del cliente.
Con esta configuración, su aplicación SvelteKit cargará Kameleoon de manera eficiente y evitará problemas relacionados con la hidratación.