Performance: Mobile-Optimierungen für besseren PageSpeed
- Portrait-Bild von 1.2MB auf ~20KB optimiert (300px/600px + WebP) - Hero-Animation entfernt für schnelleren LCP - WebP srcset für alle Projekt-Bilder (6 Größen: 200-1200px) - Korrekte sizes-Attribute für Mobile (350px statt 1200px) - Supabase lazy laden via dynamischen Import - Admin-Check verzögert mit requestIdleCallback - Hauptbundle von 461KB auf 358KB reduziert 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ import {
|
||||
Phone,
|
||||
LayoutDashboard,
|
||||
} from "lucide-react";
|
||||
import { supabase } from "../utils/supabaseClient";
|
||||
// Supabase wird lazy geladen um Initial Bundle zu reduzieren
|
||||
import { ContactInfo } from "./ContactInfo";
|
||||
import { NavLink } from "./NavLink";
|
||||
import LanguageSwitcher from "./LanguageSwitcher";
|
||||
@@ -52,9 +52,21 @@ const Layout = ({ children }: LayoutProps) => {
|
||||
setIsMenuOpen(!isMenuOpen);
|
||||
};
|
||||
|
||||
// Prüfe Admin-Status und registriere den Scroll-Handler
|
||||
// Scroll-Handler
|
||||
useEffect(() => {
|
||||
const handleScroll = () => {
|
||||
setScrolled(window.scrollY > 0);
|
||||
};
|
||||
window.addEventListener("scroll", handleScroll);
|
||||
return () => window.removeEventListener("scroll", handleScroll);
|
||||
}, []);
|
||||
|
||||
// Prüfe Admin-Status verzögert und lazy (nach Initial Render)
|
||||
useEffect(() => {
|
||||
const checkAdmin = async () => {
|
||||
// Dynamischer Import von Supabase - wird erst geladen wenn benötigt
|
||||
const { supabase } = await import("../utils/supabaseClient");
|
||||
|
||||
const { data, error } = await supabase.auth.getSession();
|
||||
if (error) {
|
||||
console.error("Error checking admin status:", error);
|
||||
@@ -74,13 +86,13 @@ const Layout = ({ children }: LayoutProps) => {
|
||||
setIsAdmin(adminData.isAdmin);
|
||||
}
|
||||
};
|
||||
checkAdmin();
|
||||
|
||||
const handleScroll = () => {
|
||||
setScrolled(window.scrollY > 0);
|
||||
};
|
||||
window.addEventListener("scroll", handleScroll);
|
||||
return () => window.removeEventListener("scroll", handleScroll);
|
||||
// Verzögere Admin-Check bis nach dem Initial Paint
|
||||
if ('requestIdleCallback' in window) {
|
||||
requestIdleCallback(() => checkAdmin());
|
||||
} else {
|
||||
setTimeout(checkAdmin, 2000);
|
||||
}
|
||||
}, []);
|
||||
|
||||
const navigationLinks = [
|
||||
|
||||
Reference in New Issue
Block a user