feat(partitario): sottoconti del Piano dei conti come DataTable paginata server-side#1851
Open
AllWorkNoPlay-95 wants to merge 1 commit into
Open
Conversation
Oltre una soglia configurabile (impostazione "Soglia datatable sottoconti", default 500) i sottoconti di un mastro vengono mostrati come DataTable con ricerca e impaginazione server-side invece di caricare tutto nel DOM. La query di pagina seleziona prima i sottoconti da mostrare in una derived table (con LIMIT) e solo dopo esegue i join anagrafica/movimenti, con indice su co_piano_dei_conti3(id_piano_dei_conti2, numero). Il join anagrafica usa due LEFT JOIN diretti indicizzati su an_anagrafiche invece di un join IN su derived table. Il caricamento del dettaglio di un mastro con ~6400 sottoconti passa da 33,36s a 75ms.
35fd28d to
b255f51
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Descrizione
Risolve il degrado di performance della pagina Piano dei conti
(
controller.php?id_module=17) quando un mastro contiene molti sottoconti(es. oltre 6000 conti credito verso clienti): espandendo il mastro venivano
caricati tutti i sottoconti nel DOM e la query impiegava secondi,
congelando anche il front-end.
Su un mastro con ~6400 sottoconti il caricamento del dettaglio passa da
33,36 s a 75 ms.
Soluzione
Oltre una soglia configurabile, i sottoconti di un mastro vengono mostrati come
DataTable con ricerca e impaginazione server-side invece dell'elenco completo.
Soglia datatable sottoconti(default 500, sezione"Piano dei conti"). Sotto soglia il comportamento è invariato (elenco semplice).
LIMIT/OFFSET+conteggi, quindi il browser carica ~25 righe per volta invece di migliaia.
in una derived table (con
LIMIT), poi esegue i join anagrafica/movimenti solosu quelle righe (query di pagina da ~2,5 s a ~12 ms via EXPLAIN ANALYZE).
LEFT JOINdiretti suan_anagraficheinvece del join
IN (...)su derived table (non indicizzabile), con i relativiindici su
id_conto_cliente/id_conto_fornitore(assenza segnalata nella issue).co_piano_dei_conti3 (id_piano_dei_conti2, numero)per la selezionepaginata per mastro.
server-side della tabella.
campo di ricerca, paginazione in stile Bootstrap 4, campo "Vai a pagina" e loader
standard dell'app.
Nota sul modal dei movimenti
Nella discussione della issue si era ipotizzato un modal con i movimenti al clic
sul singolo conto. In questa PR non è stato implementato: è stata mantenuta la
funzionalità preesistente di espansione inline dei movimenti (clic sul sottoconto
→ i movimenti vengono mostrati inline sotto la riga), per non alterare il comportamento
già esistente. Eventualmente valutabile come miglioria in una PR successiva.
Modifiche al database (
update/2_13.sql)Soglia datatable sottoconti.idx_id_piano_dei_conti2_numerosuco_piano_dei_conti3.idx_id_conto_cliente/idx_id_conto_fornitoresuan_anagrafiche.Dipendenze
Nessuna nuova dipendenza (DataTables, select2 e Bootstrap 4 sono già inclusi).
Risolve / Implementa: #1846
Tipologia
Checklist