Frontend performance and code quality improvements

Performance: cache getBoundingClientRect in card-glare and drag-drop,
build adjacency Maps for O(1) graph BFS, batch WebGL uniform uploads,
cache matchMedia/search text in card-sections, use Map in graph-layout.

Code quality: extract shared FPS chart factory (chart-utils.js) and
FilterListManager (filter-list.js), replace 14-way CSS editor dispatch
with type handler registry, move state to state.js, fix layer violation
in api.js, add i18n for hardcoded strings, sync 53 missing locale keys,
add HTTP error logging in DataCache.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 18:14:26 +03:00
parent 014b4175b9
commit 50c40ed13f
20 changed files with 1070 additions and 716 deletions

View File

@@ -26,6 +26,8 @@
"auth.logout.success": "Logged out successfully",
"auth.please_login": "Please login to view",
"auth.session_expired": "Your session has expired or the API key is invalid. Please login again.",
"auth.prompt_update": "Current API key is set. Enter new key to update or leave blank to remove:",
"auth.prompt_enter": "Enter your API key:",
"auth.toggle_password": "Toggle password visibility",
"displays.title": "Available Displays",
"displays.layout": "Displays",
@@ -108,6 +110,7 @@
"templates.test.results.frame_count": "Frames",
"templates.test.results.actual_fps": "Actual FPS",
"templates.test.results.avg_capture_time": "Avg Capture",
"templates.test.results.resolution": "Resolution:",
"templates.test.error.no_engine": "Please select a capture engine",
"templates.test.error.no_display": "Please select a display",
"templates.test.error.failed": "Test failed",
@@ -1512,5 +1515,11 @@
"graph.filter_placeholder": "Filter by name...",
"graph.filter_clear": "Clear filter",
"graph.filter_running": "Running",
"graph.filter_stopped": "Stopped"
"graph.filter_stopped": "Stopped",
"graph.filter_types": "Types",
"graph.filter_group.capture": "Capture",
"graph.filter_group.strip": "Color Strip",
"graph.filter_group.audio": "Audio",
"graph.filter_group.targets": "Targets",
"graph.filter_group.other": "Other"
}