diff --git a/README.md b/README.md index 21c4f3d..39484b6 100755 --- a/README.md +++ b/README.md @@ -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. diff --git a/VERSION b/VERSION index 0ee22e3..5322014 100755 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.5.90 +0.5.5.91 diff --git a/app/static/css/app.css b/app/static/css/app.css index 6db1ba7..11915cb 100755 --- a/app/static/css/app.css +++ b/app/static/css/app.css @@ -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); diff --git a/app/static/js/asset-columns.js b/app/static/js/asset-columns.js index 050dbab..748a604 100755 --- a/app/static/js/asset-columns.js +++ b/app/static/js/asset-columns.js @@ -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 => { diff --git a/app/version.py b/app/version.py index bdbeaec..4484513 100755 --- a/app/version.py +++ b/app/version.py @@ -1,2 +1,2 @@ -APP_VERSION = "0.5.5.90" +APP_VERSION = "0.5.5.91" __version__ = APP_VERSION diff --git a/docs/version-history/README.md b/docs/version-history/README.md index 57b53a6..2298ff0 100755 --- a/docs/version-history/README.md +++ b/docs/version-history/README.md @@ -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. diff --git a/docs/version-history/UPDATE-0.5.5.91.md b/docs/version-history/UPDATE-0.5.5.91.md new file mode 100755 index 0000000..d0e82ac --- /dev/null +++ b/docs/version-history/UPDATE-0.5.5.91.md @@ -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.