perf: analytics stratejisi, radix tree-shaking, DevPanel, motion/mini (Faz 2)
- Rybbit Script beforeInteractive -> afterInteractive: analitik artık hydration'dan önce kritik yolda çalışmıyor (yalnızca preload hint'i kalıyor) - next.config: experimental.optimizePackageImports ["radix-ui"] — 36 alt paketli kök barrel modül grafiğini şişiriyordu (VPS build OOM geçmişi) - DevPanel: dev-panel-mount.tsx ile prod'da import() erişilemez dalda; dev kodu + dev action proxy'leri prod chunk'lardan çıktı (rota başına ~21 KB) - motion/mini: use-pixel-heat + sihirbaz-cagri-karti yalnızca duration/ease kullanıyor; WAAPI tabanlı mini animate tam motoru bundle'dan çıkarır Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,7 @@ import { KaydetBannerLazy } from "@/features/liste/components/kaydet-banner-lazy
|
||||
import { TercihProfiliKapisiLazy } from "@/features/liste/components/tercih-profili-kapisi-lazy";
|
||||
import { HeaderGate } from "@/components/header-gate";
|
||||
import { ProgressiveBlur } from "@/components/ui/skiper-ui/skiper41";
|
||||
import { DevPanel } from "@/components/dev/dev-panel";
|
||||
import { DevPanelMount } from "@/components/dev/dev-panel-mount";
|
||||
import { ScrollFlow } from "@/components/scroll-flow";
|
||||
import { JsonLd, organizationJsonLd, webSiteJsonLd, SITE_URL } from "@/lib/seo";
|
||||
import "./globals.css";
|
||||
@@ -85,19 +85,6 @@ export default function RootLayout({
|
||||
// içerikle büyümeli, viewport tabanı body'deki min-h-dvh'den gelir.
|
||||
className={`${calSans.variable} ${clarityCity.variable} ${geistMono.variable} ${bricolage.variable} antialiased`}
|
||||
>
|
||||
{/* Rybbit analitik — beforeInteractive her zaman <head> içine defer olarak
|
||||
enjekte edilir. Yalnızca prod build'de: Rybbit localhost'u da takip
|
||||
ettiği için dev trafiği prod verisini kirletmesin (DevPanel ile aynı
|
||||
kapı). mask-patterns: /sonuc URL'i ham başarı sıralamasını,
|
||||
/odeme/sonuc sipariş kimliğini taşıyor — path tek satırda toplanır. */}
|
||||
{process.env.NODE_ENV === "production" ? (
|
||||
<Script
|
||||
src="https://rybbit.kolaytercih.com/api/script.js"
|
||||
data-site-id="f2cb042c657e"
|
||||
data-mask-patterns='["/sonuc", "/odeme/sonuc"]'
|
||||
strategy="beforeInteractive"
|
||||
/>
|
||||
) : null}
|
||||
<body className="min-h-dvh flex flex-col bg-slate-50">
|
||||
<HeaderGate>
|
||||
{/* Site geneli progressive blur — üst ve alt */}
|
||||
@@ -130,10 +117,23 @@ export default function RootLayout({
|
||||
{/* İlk "+" için sıra + sihirbaz kapısı */}
|
||||
<TercihProfiliKapisiLazy />
|
||||
<Toaster position="top-center" />
|
||||
{/* Dev süperadmin paneli — prod build'de hiç render edilmez */}
|
||||
{process.env.NODE_ENV !== "production" ? <DevPanel /> : null}
|
||||
{/* Dev süperadmin paneli — prod build'de modül grafiğine bile girmez */}
|
||||
{process.env.NODE_ENV !== "production" ? <DevPanelMount /> : null}
|
||||
<JsonLd data={organizationJsonLd()} />
|
||||
<JsonLd data={webSiteJsonLd()} />
|
||||
{/* Rybbit analitik — afterInteractive: hydration sonrası client'ta
|
||||
enjekte edilir, LCP/kritik yolla yarışmaz. Yalnızca prod build'de:
|
||||
Rybbit localhost'u da takip ettiği için dev trafiği prod verisini
|
||||
kirletmesin (DevPanel ile aynı kapı). mask-patterns: /sonuc URL'i
|
||||
ham başarı sıralamasını, /odeme/sonuc sipariş kimliğini taşıyor. */}
|
||||
{process.env.NODE_ENV === "production" ? (
|
||||
<Script
|
||||
src="https://rybbit.kolaytercih.com/api/script.js"
|
||||
data-site-id="f2cb042c657e"
|
||||
data-mask-patterns='["/sonuc", "/odeme/sonuc"]'
|
||||
strategy="afterInteractive"
|
||||
/>
|
||||
) : null}
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user