前端渲染算法优化

This commit is contained in:
CN-JS-HuiBai
2026-04-05 22:39:43 +08:00
parent 469ef9e448
commit d7d650c5f9
3 changed files with 32 additions and 20 deletions

View File

@@ -154,6 +154,8 @@ body {
z-index: 0; z-index: 0;
pointer-events: none; pointer-events: none;
animation: glowFloat 20s ease-in-out infinite; animation: glowFloat 20s ease-in-out infinite;
will-change: transform, opacity;
transform: translateZ(0);
} }
.bg-glow-1 { .bg-glow-1 {
@@ -188,19 +190,19 @@ body {
0%, 0%,
100% { 100% {
transform: translate(0, 0) scale(1); transform: translate3d(0, 0, 0) scale(1);
} }
25% { 25% {
transform: translate(30px, -30px) scale(1.05); transform: translate3d(30px, -30px, 0) scale(1.05);
} }
50% { 50% {
transform: translate(-20px, 20px) scale(0.95); transform: translate3d(-20px, 20px, 0) scale(0.95);
} }
75% { 75% {
transform: translate(25px, 15px) scale(1.02); transform: translate3d(25px, 15px, 0) scale(1.02);
} }
} }
@@ -222,8 +224,8 @@ body {
justify-content: space-between; justify-content: space-between;
padding: 0 28px; padding: 0 28px;
background: rgba(10, 14, 26, 0.85); background: rgba(10, 14, 26, 0.85);
backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(12px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(180%); -webkit-backdrop-filter: blur(12px) saturate(150%);
border-bottom: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color);
} }
@@ -278,6 +280,8 @@ body {
.dot-pulse { .dot-pulse {
animation: pulse 2s ease-in-out infinite; animation: pulse 2s ease-in-out infinite;
will-change: opacity, box-shadow;
transform: translateZ(0);
} }
@keyframes pulse { @keyframes pulse {
@@ -451,7 +455,9 @@ input:checked+.slider:before {
background: var(--bg-card); background: var(--bg-card);
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
backdrop-filter: blur(12px); backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
transform: translateZ(0);
transition: all 0.3s ease; transition: all 0.3s ease;
overflow: hidden; overflow: hidden;
} }
@@ -618,7 +624,9 @@ input:checked+.slider:before {
background: var(--bg-card); background: var(--bg-card);
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
backdrop-filter: blur(12px); backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
transform: translateZ(0);
overflow: hidden; overflow: hidden;
transition: all 0.3s ease; transition: all 0.3s ease;
} }

View File

@@ -511,12 +511,12 @@
coordinateSystem: 'geo', coordinateSystem: 'geo',
geoIndex: 0, geoIndex: 0,
showEffectOn: 'render', showEffectOn: 'render',
rippleEffect: { brushType: 'stroke', scale: 4, period: 4 }, rippleEffect: { brushType: 'stroke', scale: 3, period: 6 },
symbolSize: 6, symbolSize: 5,
itemStyle: { itemStyle: {
color: '#06b6d4', color: '#06b6d4',
shadowBlur: 10, shadowBlur: 3,
shadowColor: '#06b6d4' shadowColor: 'rgba(6, 182, 212, 0.5)'
}, },
data: [] data: []
}] }]

View File

@@ -234,7 +234,7 @@ class AreaChart {
drawArea(ctx, values, getX, getY, chartH, p, fillColorTop, fillColorBottom, strokeColor, len) { drawArea(ctx, values, getX, getY, chartH, p, fillColorTop, fillColorBottom, strokeColor, len) {
if (!values || values.length === 0) return; if (!values || values.length === 0) return;
const useSimple = len > 500; const useSimple = len > 250;
// Fill // Fill
ctx.beginPath(); ctx.beginPath();
@@ -469,16 +469,20 @@ class MetricChart {
}); });
} else { } else {
// Draw Single Line Path const useSimple = len > 250;
ctx.beginPath(); ctx.beginPath();
ctx.moveTo(getX(0), getY(values[0])); ctx.moveTo(getX(0), getY(values[0]));
for (let i = 1; i < len; i++) { for (let i = 1; i < len; i++) {
const prevX = getX(i - 1); if (useSimple) {
const currX = getX(i); ctx.lineTo(getX(i), getY(values[i]));
const prevY = getY(values[i - 1]); } else {
const currY = getY(values[i]); const prevX = getX(i - 1);
const midX = (prevX + currX) / 2; const currX = getX(i);
ctx.bezierCurveTo(midX, prevY, midX, currY, currX, currY); const prevY = getY(values[i - 1]);
const currY = getY(values[i]);
const midX = (prevX + currX) / 2;
ctx.bezierCurveTo(midX, prevY, midX, currY, currX, currY);
}
} }
// Stroke // Stroke