perf: remover polling de storage-stats e trabalho repetido na busca do cache

- useStorageMonitor: o efeito com setInterval de 10 s chamava
  /api/storage-stats em toda aba aberta só para escrever no console
  (nenhum estado é atualizado); o servidor faz fs.stat e conta as
  chaves do cache a cada chamada. A busca inicial de estatísticas
  continua.
- JsonCacheManager.searchProducts: convertToAPIProduct rodava duas vezes
  por produto (filtro e map) e a relevância era recalculada, com
  toLowerCase, a cada comparação do sort; agora é uma vez por produto.
This commit is contained in:
evandro committed 2026-10-10 04:16:34 -03:00
1 parent a9ab66e26f
commit 3d59903114
2 files changed
+13 -53

No files matched your search

+13 -15
View File
@@ -235,33 +235,31 @@ export class JsonCacheManager {
`[JSON Cache] Buscando: "${searchTerm}" (país: ${country || "todos"})`
);
// Filtrar produtos
// Filtrar produtos; a relevância é calculada uma vez por produto
const filteredProducts = Object.values(this.cacheData.products)
.filter((cachedProduct) => {
const product = this.convertToAPIProduct(cachedProduct);
// Verificar se corresponde à query
const matchesQuery =
product.product_name?.toLowerCase().includes(searchTerm) ||
product.brands?.toLowerCase().includes(searchTerm) ||
product.categories?.toLowerCase().includes(searchTerm);
cachedProduct.product_name?.toLowerCase().includes(searchTerm) ||
cachedProduct.brands?.toLowerCase().includes(searchTerm) ||
cachedProduct.categories?.toLowerCase().includes(searchTerm);
// Verificar país se especificado
const matchesCountry =
!country ||
product.countries_tags?.includes(country) ||
product.countries?.toLowerCase().includes(country.toLowerCase());
cachedProduct.countries_tags?.includes(country) ||
cachedProduct.countries?.toLowerCase().includes(country.toLowerCase());
return matchesQuery && matchesCountry;
})
.map((cachedProduct) => this.convertToAPIProduct(cachedProduct))
// Ordenar por relevância
.sort((a, b) => {
const scoreA = this.calculateRelevanceScore(a, searchTerm);
const scoreB = this.calculateRelevanceScore(b, searchTerm);
return scoreB - scoreA;
.map((cachedProduct) => {
const product = this.convertToAPIProduct(cachedProduct);
return { product, score: this.calculateRelevanceScore(product, searchTerm) };
})
.slice(0, limit);
// Ordenar por relevância
.sort((a, b) => b.score - a.score)
.slice(0, limit)
.map(({ product }) => product);
console.log(
`[JSON Cache] Encontrados ${filteredProducts.length} produtos`