mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-06 23:32:08 +00:00
- Règles de préchargement dans l'accueil et les 15 guides : une page du site est préparée quand on survole son lien (appui sur téléphone), et s'ouvre presque tout de suite. Pages seulement, pas les fichiers ; l'application n'est pas concernée. Ignoré par les navigateurs qui ne connaissent pas ces règles. - Une page préchargée ne compte pas de visite avant d'être vraiment ouverte (PostHog attend prerenderingchange), et l'animation du logo se joue à l'ouverture, pas pendant le préchargement. - CSP de la landing (deploy/nginx.conf) : empreinte des règles, et nouvelle empreinte du script du logo. Le mot-clé 'inline-speculation-rules' ne suffisait pas à Chrome. - Test : chaque script en ligne des pages a son empreinte dans la CSP, chaque page a ses règles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.2 KiB
React
29 lines
1.2 KiB
React
import { StrictMode } from 'react'
|
|
import { createRoot, hydrateRoot } from 'react-dom/client'
|
|
import './index.css'
|
|
import App from './App.jsx'
|
|
import { analytics } from './analytics.js'
|
|
import { localeFromPath } from './i18n.js'
|
|
|
|
// PostHog après le premier rendu : les événements émis avant sont mis en file et envoyés à l'init.
|
|
// Page préchargée (survol d'un lien, speculationrules) : rien ne part avant qu'on l'ouvre vraiment.
|
|
const deferInit = () => analytics.init()
|
|
const scheduleInit = () => {
|
|
if ('requestIdleCallback' in window) window.requestIdleCallback(deferInit, { timeout: 3000 })
|
|
else window.setTimeout(deferInit, 1500)
|
|
}
|
|
if (document.prerendering) document.addEventListener('prerenderingchange', scheduleInit, { once: true })
|
|
else scheduleInit()
|
|
|
|
const container = document.getElementById('root')
|
|
const app = (
|
|
<StrictMode>
|
|
<App locale={localeFromPath(window.location.pathname)} />
|
|
</StrictMode>
|
|
)
|
|
|
|
// En production le HTML est prérendu (scripts/prerender.mjs) : on l'hydrate.
|
|
// En développement (vite dev) la racine est vide : rendu client classique.
|
|
if (container.hasChildNodes()) hydrateRoot(container, app)
|
|
else createRoot(container).render(app)
|