KamoCRM

Non caricare content json per costruire l'indice degli alberi pubblici e smettere di caricarlo due volte

PerformanceKBService
Spegnimento
23 settembre 2026 alle ore 02:17 UTC
Autore
Kamo
Impegno
155e7de

buildPublicTreeIndex costruisce un piccolo indice strutturale (parent/child, slug path, antenati) da ogni articolo pubblico nel org, ma stava caricando pieno KbArticolo righe per farlo — content json incluso, misurato a ~6.6 KB per fila contro poche centinaia di byte per il resto di fila combinato. L'indice dell'albero e tutto a valle di esso (l'estratto su ogni nodo list/tree, percorso e risoluzione antestor) non legge mai content json; solo un singolo articolo legge serializza, e che una riga viene già dalla sua ricerca separata. Albero/list/singolo di un'organizzazione di 300 articoli risposta è stato tirando ~2 MB di testo corporeo fuori dal database per scartarlo immediatamente per tutti, ma una fila. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** JPQL proiezione query, non un metodo di repository — KbArticoloRepository vive in kamo-shared-library, fuori campo qui) e costruisce reali istanze KbArticolo dalle righe tramite il proprio costruttore dell'entità, mai perseverato o attaccato alla sessione. Ogni lettore esistente di PublicTreeIndex continua a lavorare immutato; getContentJson() su uno di questi è semplicemente nullo, che conta solo per codificare che serializza, e niente al di fuori di un singolo articolo letto lo fa. Separatamente, /tree-by-parent-slug ha chiamato entrambi... (che ha caricato il proprio copia di ogni articolo pubblico per ricostruire la stessa mappa dei bambini costruirePublicTreeIndex già costruisce) e costruirePublicTreeIndex — una richiesta, la lista completa org-wide articolo caricato due volte. Il primo ora prende l'indice il chiamante già costruito come parametro invece di ricostruirlo. Inoltre, tradurreRefs (breadcrumbs e "vedere anche" collegamenti, non-Inglese) risolto ogni ref traduzione riguardando la guida del ref fino a un KbArticolo e poi interrogando la sua traduzione — due query per ref. Una ref porta già l'aiuto dell'articolo che chiama ora (KbArticoloRefDTO.uid, interno solo — @JsonIgnore, mai in risposta pubblica), quindi ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ risolve ogni ref in un elenco in una query in batch. Test: KbArticoloServiceTreeIndexTest afferma che la proiezione trasporta ogni campo un carico di entità piena avrebbe (contentJson escluso, asserito nullo) e che il calcolo albero/path/ancestor costruito da esso è la stessa forma a tre livelli un carico full-entity avrebbe prodotto — l'apparecchio basato Nuovo assegno. Non e' vero. esercizi /by-slug fine alla fine in francese e dimostra che la ricerca in lotto sostituisce la pista di guida... mai chiamato per una ref).

Tutte le modifiche

Come quello che vedi la spedizione?

Tutto questo arriva nel vostro spazio di lavoro da solo. Iniziare sul piano gratuito e leggere di nuovo questa pagina in un mese.

Inizia gratis per sempreVisualizza il prezzo