q-import { /packages/qhtml7/dist/q-components/q-tech-panel.qhtml }
q-style perfPage { width: 100% min-height: 100vh box-sizing: border-box padding: 18px font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif } q-style rootLayout { width: 100% height: 100% gap: 12px } q-style titleRow { width: 100% height: 10vh min-height: 112px flex: 0 0 auto gap: 12px } q-style bodyRow { width: 100% height: 80vh min-height: 640px flex: 0 0 auto gap: 12px } q-style footerRow { width: 100% height: 30vh min-height: 250px flex: 0 0 auto gap: 12px } q-style titleMainCol { width: 60vw height: auto flex: 0 0 auto gap: 12px } q-style titleSideCol { width: 10vw min-width: 150px height: auto flex: 0 0 auto gap: 12px } q-style titleWideSideCol { width: 15vw min-width: 190px height: auto flex: 0 0 auto gap: 12px } q-style sidebarCol { width: 20vw min-width: 260px height: auto flex: 0 0 auto gap: 12px } q-style mainCol { width: 70vw height: auto flex: 0 0 auto gap: 12px } q-style fullCol { width: 100% height: auto flex: 1 1 0 gap: 12px } q-style panel { box-sizing: border-box width: 100% height: 100% padding: 20px border: 1px solid border-radius: 16px overflow: hidden } q-style softPanel { box-sizing: border-box width: 100% padding: 16px border: 1px solid border-radius: 14px } q-style titlePanel { display: flex align-items: center justify-content: space-between gap: 18px } q-style metricPanel { display: flex flex-direction: column justify-content: center gap: 6px } q-style stack { display: flex flex-direction: column gap: 14px } q-style tightStack { display: flex flex-direction: column gap: 8px } q-style optionGrid { display: grid grid-template-columns: repeat(2, minmax(0, 1fr)) gap: 14px } q-style stepGrid { display: grid grid-template-columns: repeat(4, minmax(0, 1fr)) gap: 12px } q-style optionCard { box-sizing: border-box min-height: 190px padding: 18px border: 1px solid border-radius: 14px } q-style sideEffect { border-left: 3px solid padding-left: 10px } q-style badgeRow { display: flex align-items: center flex-wrap: wrap gap: 8px } q-style badge { display: inline-flex align-items: center min-height: 28px padding: 0 10px border: 1px solid border-radius: 999px font-size: 12px font-weight: 800 } q-style icon { display: inline-grid place-items: center width: 38px height: 38px border-radius: 12px font-size: 18px font-weight: 950 } q-style kicker { margin: 0 font-size: 13px font-weight: 900 letter-spacing: 0.14em text-transform: uppercase } q-style title { margin: 0 font-size: clamp(28px, 4vw, 48px) line-height: 1 letter-spacing: 0 font-weight: 950 } q-style sectionTitle { margin: 0 font-size: 25px line-height: 1.12 font-weight: 900 } q-style cardTitle { margin: 0 font-size: 18px line-height: 1.2 font-weight: 850 } q-style copy { margin: 0 line-height: 1.58 font-size: 15px } q-style small { margin: 0 line-height: 1.45 font-size: 13px } q-style metricValue { margin: 0 font-size: 28px line-height: 1 font-weight: 950 } q-style buttonRow { display: flex align-items: center flex-wrap: wrap gap: 10px } q-style button { display: inline-flex align-items: center justify-content: center min-height: 42px padding: 0 18px border: 1px solid border-radius: 999px text-decoration: none font-weight: 900 } q-style footerContent { display: grid grid-template-columns: minmax(0, 1fr) auto align-items: center gap: 20px } q-theme perfTheme { section.perf-page { perfPage } q-layout.perf-root { rootLayout } q-row.perf-title-row { titleRow } q-row.perf-body-row { bodyRow } q-row.perf-footer-row { footerRow } q-col.perf-title-main { titleMainCol } q-col.perf-title-side { titleSideCol } q-col.perf-title-wide-side { titleWideSideCol } q-col.perf-sidebar { sidebarCol } q-col.perf-main { mainCol } q-col.perf-full { fullCol } div.panel { panel } div.soft-panel { softPanel } div.title-panel { titlePanel } div.metric-panel { metricPanel panel } div.stack { stack } div.tight-stack { tightStack } div.option-grid { optionGrid } div.step-grid { stepGrid } article.option-card { optionCard } div.side-effect { sideEffect } div.badge-row { badgeRow } span.badge { badge } span.icon { icon } div.button-row { buttonRow } a.btn { button } div.footer-content { footerContent } p.kicker { kicker } h1.title { title } h2.section-title { sectionTitle } h3.card-title { cardTitle } p.copy { copy } p.small { small } p.metric-value { metricValue } } q-component perf-option { q-property iconText: "⚡" q-property classes: "" article { class: "option-card ${this.classes}" div.stack { div.badge-row { span.icon { text { ${this.iconText} } } h3.card-title { slot { title } } } p.copy { slot { benefit } } div.side-effect { p.small { slot { sideEffect } } } } } } q-component perf-step { q-property label: "1" div.soft-panel { div.tight-stack { span.badge { text { ${this.label} } } h3.card-title { slot { title } } p.small { slot { body } } } } } perfTheme { section.perf-page { q-layout.perf-root { width: "100%" height: "100%" gap: "12px" q-row.perf-title-row { width: "100%" height: "10vh" flex: "0 0 auto" gap: "12px" q-col.perf-title-main { width: "60vw" height: "auto" flex: "0 0 auto" gap: "12px" div.title-panel.panel { div.tight-stack { p.kicker { text { Performance Optimization } } h1.title { text { Faster systems without turning the codebase into a science project. } } } div.badge-row { span.badge { text { Profile } } span.badge { text { Simplify } } span.badge { text { Verify } } } } } q-col.perf-title-side { width: "10vw" height: "auto" flex: "0 0 auto" gap: "12px" div.metric-panel { p.metric-value { text { UX } } p.small { text { Faster perceived response } } } } q-col.perf-title-wide-side { width: "15vw" height: "auto" flex: "0 0 auto" gap: "12px" div.metric-panel { p.metric-value { text { OPS } } p.small { text { Lower load, fewer spikes } } } } } q-row.perf-body-row { width: "100%" height: "80vh" flex: "0 0 auto" gap: "12px" q-col.perf-sidebar { width: "20vw" height: "auto" flex: "0 0 auto" gap: "12px" div.stack { div.panel.dark { div.tight-stack { p.kicker.dark { text { Strategy } } h2.section-title { text { Choose the smallest useful optimization. } } p.copy.dark { text { Performance work is most valuable when it removes visible friction, reduces operational cost, or makes the system easier to scale. The goal is not maximum cleverness. The goal is less wasted work. } } } } div.soft-panel { div.tight-stack { h3.card-title { text { Good candidates } } p.small { text { Slow first load, heavy interaction paths, repeated API calls, expensive renders, large media, wasteful queries, or background work that blocks user action. } } } } div.soft-panel { div.tight-stack { h3.card-title { text { Watch for } } p.small { text { Added caching rules, stale data, harder debugging, larger build complexity, and optimizations that hide an architecture problem instead of fixing it. } } } } } } q-col.perf-main { width: "70vw" height: "auto" flex: "0 0 auto" gap: "12px" div.panel { div.stack { div.tight-stack { p.kicker { text { Options and Tradeoffs } } h2.section-title { text { High-level choices that improve speed while keeping the system maintainable. } } p.copy { text { Start with measurement, then pick the optimization that changes the user experience or operating cost with the least permanent complexity. } } } div.option-grid { perf-option { iconText: "🧭" classes: "accent" title { text { Profile the real bottleneck } } benefit { text { Capture traces, slow paths, and user-facing delays before changing code. This keeps effort focused on the constraint that actually matters. } } sideEffect { text { Side effect: adds setup time and may delay obvious-looking fixes, but it prevents optimizing the wrong layer. } } } perf-option { iconText: "📦" title { text { Reduce shipped work } } benefit { text { Trim unused code, split expensive screens, compress assets, and defer non-critical features until the user needs them. } } sideEffect { text { Side effect: more build and loading boundaries, which can complicate debugging and deployment if overused. } } } perf-option { iconText: "🧠" title { text { Cache intentionally } } benefit { text { Reuse stable results, precompute expensive data, and avoid repeated network or database work on common paths. } } sideEffect { text { Side effect: introduces invalidation rules, stale-data risk, and extra operational visibility requirements. } } } perf-option { iconText: "🎛" title { text { Smooth interactive paths } } benefit { text { Batch updates, reduce re-render pressure, move heavy work off hot interactions, and keep the main user workflow responsive. } } sideEffect { text { Side effect: asynchronous flows can make ordering, cancellation, and error handling more important. } } } } } } } } q-row.perf-footer-row { width: "100%" height: "30vh" flex: "0 0 auto" gap: "12px" q-col.perf-full { width: "100%" height: "auto" flex: "1 1 0" gap: "12px" div.panel { div.footer-content { div.stack { div.tight-stack { p.kicker { text { Practical Plan } } h2.section-title { text { Measure, change one layer, then lock in the win. } } p.copy { text { A modern performance pass should produce fewer hot paths, clearer loading behavior, and regression checks that keep the improvement from disappearing next release. } } } div.step-grid { perf-step { label: "01" title { text { Trace } } body { text { Identify the slow route, render, query, or asset path using real usage. } } } perf-step { label: "02" title { text { Simplify } } body { text { Remove duplicated work before adding new infrastructure. } } } perf-step { label: "03" title { text { Optimize } } body { text { Apply the smallest cache, split, batch, or refactor that changes the result. } } } perf-step { label: "04" title { text { Guard } } body { text { Add checks, budgets, or benchmarks so the system does not regress quietly. } } } } } div.button-row { a.btn { href: "/contact" text { Plan a performance review } } a.btn.ghost { href: "/tools/search/" text { Explore tools } } } } } } } } } }