Displaying of table scrolling optimized

This commit is contained in:
2026-09-28 15:30:51 +02:00
parent 7d314057e4
commit 0d2333694e
7 changed files with 56 additions and 17 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# AssetManager 0.5.5.90
# AssetManager 0.5.5.91
AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. It provides asset inventory, software inventory, remote job execution, reporting, privacy/retention documentation, and optional integration with MeshCentral.
+1 -1
View File
@@ -1 +1 @@
0.5.5.90
0.5.5.91
+4
View File
@@ -765,6 +765,8 @@ body.asset-list-scroll-page #asset-table-scroll{
overflow-x:auto;
overflow-y:auto;
overscroll-behavior:contain;
/* v0.5.5.91: reduce repaint pressure during horizontal and vertical scroll. */
will-change:scroll-position;
}
/* The older containment rule prevents reliable scroll sizing in this layout. */
@@ -3252,6 +3254,8 @@ html[data-theme="dark"] .advanced-filter-popup select,html[data-theme="dark"] .a
min-height:0;
overflow:auto;
overscroll-behavior:contain;
/* v0.5.5.91: keep scrolling on the compositor path where possible. */
will-change:scroll-position;
border:1px solid var(--am-border,#d8dde2);
border-radius:6px;
background:var(--am-surface,#fff);
+32 -13
View File
@@ -134,20 +134,39 @@
applyHidden();
}
let syncing = false;
scroll?.addEventListener('scroll', () => {
if (syncing || !topScroll) return;
syncing = true;
topScroll.scrollLeft = scroll.scrollLeft;
syncing = false;
}, { passive: true });
// Keep the optional top scrollbar synchronized without forcing a second
// scroll-position write for every native scroll event. Fast horizontal
// scrolling can emit several events within one paint cycle; coalescing
// them into one animation frame reduces Chromium repaint/compositor work.
let scrollSyncFrame = 0;
let scrollSyncSource = null;
topScroll?.addEventListener('scroll', () => {
if (syncing || !scroll) return;
syncing = true;
scroll.scrollLeft = topScroll.scrollLeft;
syncing = false;
}, { passive: true });
function scheduleScrollSync(source) {
scrollSyncSource = source;
if (scrollSyncFrame) return;
scrollSyncFrame = requestAnimationFrame(() => {
scrollSyncFrame = 0;
const sourceElement = scrollSyncSource;
scrollSyncSource = null;
if (sourceElement === scroll && topScroll) {
if (topScroll.scrollLeft !== scroll.scrollLeft) {
topScroll.scrollLeft = scroll.scrollLeft;
}
return;
}
if (sourceElement === topScroll && scroll) {
if (scroll.scrollLeft !== topScroll.scrollLeft) {
scroll.scrollLeft = topScroll.scrollLeft;
}
}
});
}
scroll?.addEventListener('scroll', () => scheduleScrollSync(scroll), { passive: true });
topScroll?.addEventListener('scroll', () => scheduleScrollSync(topScroll), { passive: true });
headers().forEach(th => {
th.addEventListener('contextmenu', event => {
+1 -1
View File
@@ -1,2 +1,2 @@
APP_VERSION = "0.5.5.90"
APP_VERSION = "0.5.5.91"
__version__ = APP_VERSION
+2 -1
View File
@@ -1,3 +1,4 @@
- [0.5.5.91](UPDATE-0.5.5.91.md) - smoother table scrolling and consolidated current development changes.
- [0.5.5.90](UPDATE-0.5.5.90.md) - modular analyzer profiles, community repository foundation and portable package import/export.
- [0.5.5.89](UPDATE-0.5.5.89.md) - recursively analyze supported SFX payloads and package selected embedded installers.
- [0.5.5.88](UPDATE-0.5.5.88.md) - keep title/filter rows sticky while preserving unified column resizing.
@@ -26,7 +27,7 @@
Release notes are stored outside the project root to keep the repository overview compact.
The current release is **0.5.5.90**.
The current release is **0.5.5.91**.
Older notes are concise English summaries migrated from the original release documents. Git history remains authoritative for exact implementation details.
+15
View File
@@ -0,0 +1,15 @@
# Update 0.5.5.91
Version 0.5.5.91 closes the current development cycle after the 0.5.5.90 analyzer/profile, package exchange, file-picker and runtime changes.
## Table scrolling
- Optimized synchronization between the Asset list top and bottom horizontal scrollbars.
- Multiple native scroll events in one browser paint cycle are now coalesced with `requestAnimationFrame`.
- Avoids redundant `scrollLeft` writes when both scrollbars are already synchronized.
- Added a compositor scrolling hint to interactive data-table scroll containers.
- No changes to column widths, column ordering, filters, sticky headers or resize behavior.
## Release
- Application version updated to 0.5.5.91.