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. 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-x:auto;
overflow-y:auto; overflow-y:auto;
overscroll-behavior:contain; 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. */ /* 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; min-height:0;
overflow:auto; overflow:auto;
overscroll-behavior:contain; 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:1px solid var(--am-border,#d8dde2);
border-radius:6px; border-radius:6px;
background:var(--am-surface,#fff); background:var(--am-surface,#fff);
+32 -13
View File
@@ -134,20 +134,39 @@
applyHidden(); applyHidden();
} }
let syncing = false; // Keep the optional top scrollbar synchronized without forcing a second
scroll?.addEventListener('scroll', () => { // scroll-position write for every native scroll event. Fast horizontal
if (syncing || !topScroll) return; // scrolling can emit several events within one paint cycle; coalescing
syncing = true; // them into one animation frame reduces Chromium repaint/compositor work.
topScroll.scrollLeft = scroll.scrollLeft; let scrollSyncFrame = 0;
syncing = false; let scrollSyncSource = null;
}, { passive: true });
topScroll?.addEventListener('scroll', () => { function scheduleScrollSync(source) {
if (syncing || !scroll) return; scrollSyncSource = source;
syncing = true; if (scrollSyncFrame) return;
scroll.scrollLeft = topScroll.scrollLeft;
syncing = false; scrollSyncFrame = requestAnimationFrame(() => {
}, { passive: true }); 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 => { headers().forEach(th => {
th.addEventListener('contextmenu', event => { 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 __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.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.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. - [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. 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. 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.