perf: reduce library pages on low memory devices
This commit is contained in:
parent
4ffe6e9012
commit
cb653d15d0
@ -57,6 +57,8 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi
|
|||||||
preventing repeated clicks from issuing duplicate LLM casting requests.
|
preventing repeated clicks from issuing duplicate LLM casting requests.
|
||||||
- **Image Job Cancellation.** Consistent profile/reference jobs now expose a cooperative cancellation endpoint and
|
- **Image Job Cancellation.** Consistent profile/reference jobs now expose a cooperative cancellation endpoint and
|
||||||
progress-panel Cancel control; queued work can be cancelled without interrupting unrelated ComfyUI jobs.
|
progress-panel Cancel control; queued work can be cancelled without interrupting unrelated ComfyUI jobs.
|
||||||
|
- **Low-Memory Table Mode.** Character and voice-library pages now render 25 rows at a time on devices reporting
|
||||||
|
approximately 4 GB RAM or less, while images remain lazy-loaded.
|
||||||
- **Preview Blob Lifecycle.** Character-library and Rehearser local voice previews now revoke replaced or completed
|
- **Preview Blob Lifecycle.** Character-library and Rehearser local voice previews now revoke replaced or completed
|
||||||
object URLs, reducing retained browser memory during repeated auditioning.
|
object URLs, reducing retained browser memory during repeated auditioning.
|
||||||
- **Character Library Smoke Coverage.** Added deterministic browser coverage for opening Characters / Cast, profile
|
- **Character Library Smoke Coverage.** Added deterministic browser coverage for opening Characters / Cast, profile
|
||||||
|
|||||||
3
TODO.md
3
TODO.md
@ -115,7 +115,8 @@ the first block before investing in architecture or polish.
|
|||||||
- [x] Revoke discarded object URLs with `URL.revokeObjectURL(objectUrl)`; completed synthesized voice previews and
|
- [x] Revoke discarded object URLs with `URL.revokeObjectURL(objectUrl)`; completed synthesized voice previews and
|
||||||
character/Rehearser local auditions now release their Blob URLs when playback ends or is replaced.
|
character/Rehearser local auditions now release their Blob URLs when playback ends or is replaced.
|
||||||
- [x] Add low-memory mode using `navigator.deviceMemory` where available; shared worker pools cap at two tasks on devices reporting approximately 4 GB RAM or less.
|
- [x] Add low-memory mode using `navigator.deviceMemory` where available; shared worker pools cap at two tasks on devices reporting approximately 4 GB RAM or less.
|
||||||
- [ ] Disable image preloading and reduce table/cache sizes on devices with approximately 4 GB RAM.
|
- [x] Disable image preloading and reduce table/cache sizes on devices with approximately 4 GB RAM. Images use
|
||||||
|
lazy decoding, and character/voice pages reduce from 50 to 25 rows when `navigator.deviceMemory <= 4`.
|
||||||
|
|
||||||
## P1 — Backend stability and bounded concurrency
|
## P1 — Backend stability and bounded concurrency
|
||||||
|
|
||||||
|
|||||||
4
static/dist/main.min.js
vendored
4
static/dist/main.min.js
vendored
File diff suppressed because one or more lines are too long
@ -186,7 +186,7 @@ async function libraryRenderCharacters() {
|
|||||||
// memory for sorting, relationship lookups and bulk operations, while
|
// memory for sorting, relationship lookups and bulk operations, while
|
||||||
// only one 50-row page is put into the DOM at a time.
|
// only one 50-row page is put into the DOM at a time.
|
||||||
const pageKey = 'ttsvc_libchars_page::' + book;
|
const pageKey = 'ttsvc_libchars_page::' + book;
|
||||||
const pageSize = 50;
|
const pageSize = typeof window.ttvcIsLowMemoryDevice === 'function' && window.ttvcIsLowMemoryDevice() ? 25 : 50;
|
||||||
const requestedPage = Math.max(1, parseInt(localStorage.getItem(pageKey) || '1', 10) || 1);
|
const requestedPage = Math.max(1, parseInt(localStorage.getItem(pageKey) || '1', 10) || 1);
|
||||||
const visibleCount = Math.min(chars.length, requestedPage * pageSize);
|
const visibleCount = Math.min(chars.length, requestedPage * pageSize);
|
||||||
const visibleChars = chars.slice(0, visibleCount);
|
const visibleChars = chars.slice(0, visibleCount);
|
||||||
|
|||||||
@ -1827,7 +1827,7 @@ function renderVoiceList() {
|
|||||||
window._voicePage = 1;
|
window._voicePage = 1;
|
||||||
}
|
}
|
||||||
const totalFiltered = filtered.length;
|
const totalFiltered = filtered.length;
|
||||||
const pageSize = 50;
|
const pageSize = typeof window.ttvcIsLowMemoryDevice === 'function' && window.ttvcIsLowMemoryDevice() ? 25 : 50;
|
||||||
const page = Math.max(1, Number(window._voicePage) || 1);
|
const page = Math.max(1, Number(window._voicePage) || 1);
|
||||||
const pageEnd = Math.min(totalFiltered, page * pageSize);
|
const pageEnd = Math.min(totalFiltered, page * pageSize);
|
||||||
const pageItems = filtered.slice(0, pageEnd);
|
const pageItems = filtered.slice(0, pageEnd);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user