Skip to content

Commit 09e362d

Browse files
reducido llamas ipc innecesarias
movidas todo lo posible de caches a un archivo
1 parent 12d2c04 commit 09e362d

11 files changed

Lines changed: 144 additions & 49 deletions

frontend/home/caches_datos.js

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/**
2+
* @file caches_datos.js
3+
* @description Almacén central de datos cacheados para el frontend (RAM).
4+
* Centraliza información que debe estar disponible globalmente sin redundancia de IPC.
5+
*/
6+
7+
// --- DATOS DEL USUARIO SESIÓN ---
8+
export let ID_USUARIO_MONGO = null;
9+
export let APODO_USUARIO = null;
10+
export let CORREO_USUARIO = null;
11+
12+
export function establecer_id_usuario(id) {
13+
if (!id) return;
14+
ID_USUARIO_MONGO = id;
15+
console.log(`[Cache] ID de usuario establecido`);
16+
}
17+
18+
export function establecer_apodo_usuario(apodo) {
19+
if (!apodo) return;
20+
APODO_USUARIO = apodo;
21+
console.log(`[Cache] Apodo de usuario establecido`);
22+
}
23+
24+
export function establecer_correo_usuario(correo) {
25+
if (!correo) return;
26+
CORREO_USUARIO = correo;
27+
console.log(`[Cache] Correo de usuario establecido`);
28+
}
29+
30+
// --- CACHÉ DE UI Y ESTADO TEMPORAL ---
31+
32+
/**
33+
* Cache para el buscador de chats en el panel lateral.
34+
* Evita recargas innecesarias si el texto no ha cambiado.
35+
*/
36+
export let cache_input_buscar_chat_ultimo = "";
37+
export function establecer_cache_busqueda_chat(valor) {
38+
cache_input_buscar_chat_ultimo = valor;
39+
}
40+
41+
/**
42+
* Caché para la lista de usuarios seleccionados al crear un nuevo chat o grupo.
43+
*/
44+
export let _cache_lista_usuarios_añadir = null;
45+
export function establecer_cache_lista_usuarios_añadir(valor) {
46+
_cache_lista_usuarios_añadir = valor;
47+
}
48+
49+
// --- CACHÉ DE DATOS DE NEGOCIO (CHATS/USUARIOS) ---
50+
51+
/**
52+
* Caché de usuarios del chat activo actualmente.
53+
* id -> { data, timestamp }
54+
*/
55+
export const CACHE_USUARIOS_ACTIVO = new Map();
56+
57+
/**
58+
* Caché de corta duración para peticiones repetitivas durante procesamiento por lotes (IPC).
59+
* Centralizado para evitar duplicidad de peticiones en un corto periodo de tiempo.
60+
*/
61+
export const batchRequestCache = {
62+
data: new Map(),
63+
64+
async get(key, fetcher, ttl = 500) {
65+
const now = Date.now();
66+
const entry = this.data.get(key);
67+
68+
if (!entry || entry.expiry < now) {
69+
this.data.set(key, { value: await fetcher(), expiry: now + ttl });
70+
}
71+
return this.data.get(key).value;
72+
}
73+
};
74+
75+
/**
76+
* Almacena los archivos seleccionados para el próximo mensaje que se va a enviar.
77+
*/
78+
export let cache_archivos_adjuntos = [];
79+
export function establecer_cache_archivos_adjuntos(archivos) {
80+
cache_archivos_adjuntos = archivos;
81+
}

frontend/home/renderer.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
import { manejar_descarga_archivo } from './ui/descarga_archivos.js'
3737
import { toggle_historial_descargas, mensaje_bienvenida_usuario } from './ui/navegacion_vistas.js'
3838
import { manejar_ui_cierre_sesion } from './ui/servicios_sesion.js'
39+
import { establecer_id_usuario, establecer_apodo_usuario, establecer_correo_usuario, cache_input_buscar_chat_ultimo, establecer_cache_busqueda_chat } from './caches_datos.js'
3940

4041
// Inicializar el bridge de actualización para el backend
4142
set_callback_actualizar_listas(ACTUALIZAR_LISTAS_CHAT);
@@ -169,13 +170,14 @@ async function preparar_interfaz_y_servicios() {
169170
document.querySelector("#bt-añadir-chat")?.addEventListener("click", (e) => desplegar_menu_añadir_chat({ e, mostrar: true }))
170171
document.querySelector("#bt-seccion-historial-archivos")?.addEventListener("click", toggle_historial_descargas)
171172

172-
let cache_input_buscar_chat_ultimo = ""
173+
173174
const input_buscar_chat = document.querySelector("#input-buscar-chat")
174175
input_buscar_chat?.addEventListener("keyup", (e) => {
175176
e.preventDefault()
176-
if (input_buscar_chat.value.trim() !== cache_input_buscar_chat_ultimo) {
177-
ACTUALIZAR_LISTAS_CHAT(input_buscar_chat.value.trim())
178-
cache_input_buscar_chat_ultimo = input_buscar_chat.value.trim()
177+
const valor = input_buscar_chat.value.trim()
178+
if (valor !== cache_input_buscar_chat_ultimo) {
179+
ACTUALIZAR_LISTAS_CHAT(valor)
180+
establecer_cache_busqueda_chat(valor)
179181
}
180182
})
181183

@@ -211,6 +213,17 @@ document.addEventListener("DOMContentLoaded", async () => {
211213

212214
try {
213215
// 1. Procesos de arranque
216+
console.log("[Renderer] Obteniendo ID de usuario...");
217+
const [id_mongo, apodo, correo] = await Promise.all([
218+
window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO(),
219+
window.cuenta_usuario.GET_APODO_SESION(),
220+
window.cuenta_usuario.OBTENER_CORREO_USUARIO()
221+
]);
222+
223+
establecer_id_usuario(id_mongo);
224+
establecer_apodo_usuario(apodo);
225+
establecer_correo_usuario(correo);
226+
214227
console.log("[Renderer] Lanzando mensaje de bienvenida...");
215228
mensaje_bienvenida_usuario().catch(e => console.error("Error bienvenida:", e))
216229

frontend/home/ui/ajustes.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export let bloquear_span_cambio_contraseña = false;
22
export let bloquear_span_cambio_apodo = false;
33
export let bloquear_span_cambio_correo = false;
44
import { escapeHTML } from './seguridad_ui.js';
5+
import { APODO_USUARIO, establecer_apodo_usuario, CORREO_USUARIO, establecer_correo_usuario } from '../caches_datos.js';
56

67

78
const formatoScroollAnimacion = {
@@ -102,14 +103,14 @@ async function cerrar_cuerpos_ajustes(no_cerrar) {
102103
}
103104

104105
async function actualizar_datos_cuenta() {
105-
const [fecha_creacion, fecha_bloqueo_apodo, fecha_bloqueo_correo, fecha_bloqueo_contraseña, apodo, correo] = await Promise.all([
106+
const [fecha_creacion, fecha_bloqueo_apodo, fecha_bloqueo_correo, fecha_bloqueo_contraseña] = await Promise.all([
106107
window.cuenta_usuario.OBTENER_FECHA_CREACION_CUENTA(),
107108
window.cuenta_usuario.OBTENER_FECHA_BLOQUEO_APODO(),
108109
window.cuenta_usuario.OBTENER_FECHA_BLOQUEO_CORREO(),
109-
window.cuenta_usuario.OBTENER_FECHA_BLOQUEO_CONTRASEÑA(),
110-
window.cuenta_usuario.GET_APODO_SESION(),
111-
window.cuenta_usuario.OBTENER_CORREO_USUARIO()
110+
window.cuenta_usuario.OBTENER_FECHA_BLOQUEO_CONTRASEÑA()
112111
]);
112+
const apodo = APODO_USUARIO;
113+
const correo = CORREO_USUARIO;
113114

114115
document.querySelector("#text-cuenta-apodo").innerHTML = `Apodo: <font color="#E53612">${escapeHTML(apodo)}</font>`;
115116
document.querySelector("#text-cuenta-correo").innerHTML = `Correo electrónico: <font color="#E53612">${escapeHTML(correo)}</font>`;
@@ -273,6 +274,7 @@ async function funcion_cambiar_apodo(e) {
273274
if (final) {
274275
window.pushNotificacion({ prioridad: 0, texto: "Apodo cambiado correctamente", tipo: "success" });
275276
bloquear_span_cambio_apodo = true;
277+
establecer_apodo_usuario(apodo);
276278
document.querySelector("#alineador-menu-cambiar-data-cuenta").classList.replace("flex-display", "ocultar-display");
277279
if (typeof window.cambiar_menu_inicio_apodo === "function") window.cambiar_menu_inicio_apodo();
278280
} else {
@@ -327,6 +329,7 @@ async function funcion_cambiar_correo(e) {
327329
if (final) {
328330
window.pushNotificacion({ prioridad: 1, texto: "Correo cambiado", tipo: "success" });
329331
bloquear_span_cambio_correo = true;
332+
establecer_correo_usuario(email);
330333
await window.paginas_app.CAMBIAR_PAGINA_SESION();
331334
} else {
332335
window.pushNotificacion({ prioridad: 0, texto: "Error al cambiar el correo", tipo: "error" });

frontend/home/ui/añadir_chats_usuarios.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const $btnAgregar = document.querySelector("#bt-agregar-contacto-nuevo");
22
import { escapeHTML } from './seguridad_ui.js';
3+
import { CORREO_USUARIO, _cache_lista_usuarios_añadir, establecer_cache_lista_usuarios_añadir } from '../caches_datos.js';
34

45
const clase_cp_lista_contactos_añadidos = "componente-lista-contactos-añadidos-chat-crear"
56
const $nombreChatNuevo = document.querySelector("#nombre-chat-nuevo-crear");
@@ -9,7 +10,7 @@ export function set_callback_actualizar_listas(cb) {
910
_callback_actualizar_listas = cb;
1011
}
1112

12-
let _cache_lista_usuarios_añadir = null
13+
1314
export function desplegar_menu_añadir_chat({ e = null, mostrar = true, id_chat = "" }) {
1415
if (e) e.preventDefault()
1516

@@ -127,11 +128,18 @@ function actualizar_lista_usuarios_añadir({ conjunto = null, remove = false, cl
127128
}
128129

129130
function actualizar_cache_listas_usuarios_añadir(data, clean = false) {
130-
if (clean) _cache_lista_usuarios_añadir = null
131-
const MAX_CONTACTOS_CACHE = 5000//limitar cache
131+
if (clean) {
132+
establecer_cache_lista_usuarios_añadir(null);
133+
return;
134+
}
135+
const MAX_CONTACTOS_CACHE = 5000; // limitar cache
132136

133-
if (_cache_lista_usuarios_añadir != data && data.length <= MAX_CONTACTOS_CACHE) _cache_lista_usuarios_añadir = data
134-
else if (_cache_lista_usuarios_añadir != data) _cache_lista_usuarios_añadir = null//si la cache supera el limite es inutil guardar los datos, mejor limpiarla y esperar a que baje al limite
137+
if (_cache_lista_usuarios_añadir != data && (!data || data.length <= MAX_CONTACTOS_CACHE)) {
138+
establecer_cache_lista_usuarios_añadir(data);
139+
}
140+
else if (_cache_lista_usuarios_añadir != data) {
141+
establecer_cache_lista_usuarios_añadir(null); // si la cache supera el limite es inutil guardar los datos, mejor limpiarla
142+
}
135143
}
136144
function mirar_usuarios_añadir_lista() {
137145
/*funcion para recuperar la lista de usuarios para añadir del html
@@ -202,7 +210,7 @@ async function buscar_usuario_añadir_chat(e) {
202210
window.pushNotificacion({ prioridad: 2, texto: "Formato de correo no válido", tipo: "info" })
203211
return null
204212
}
205-
const correo_usuario = await window.cuenta_usuario.OBTENER_CORREO_USUARIO()
213+
const correo_usuario = CORREO_USUARIO
206214
if (texto_buscar === correo_usuario) return null
207215
else resultado = await buscar_y_procesar_cache(texto_buscar, true)
208216
}

frontend/home/ui/buzon_eventos.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Actualizar_render_chat, ACTUALIZAR_LISTAS_CHAT, refrescar_componente_lista_chats, cambiar_datos_componente_lista_chats, INCREMENTAR_MENSAJES_CACHE_ACTIVA } from './gestor_chats.js'
2+
import { ID_USUARIO_MONGO } from '../caches_datos.js'
23
import { Encontrar_Nombre_Chat_Usuario, Es_usuario_Sesion } from './chat.js'
34
import { safeIdSelector } from './seguridad_ui.js';
45

@@ -161,7 +162,7 @@ async function Cambio_buzonApi_mensaje(entrada, lote = null) {
161162
async function Cambio_buzonApi_unirse_grupo(entrada, esta_silenciado) {
162163
const nombreChat = await Encontrar_Nombre_Chat_Usuario({ id_buscar: entrada.data.chat })
163164
if (!esta_silenciado) {
164-
const mi_id = await window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO();
165+
const mi_id = ID_USUARIO_MONGO;
165166
if (entrada.data.usuarios.includes(mi_id)) {
166167
window.pushNotificacion({ prioridad: 0, texto: `Te has unido a un nuevo chat${nombreChat ? `\n${nombreChat}` : ``}`, tipo: "info" })
167168
}

frontend/home/ui/chat.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { desplegar_menu_añadir_chat } from './añadir_chats_usuarios.js'
2+
import { ID_USUARIO_MONGO, APODO_USUARIO, CACHE_USUARIOS_ACTIVO } from '../caches_datos.js'
23
import { url_icono_extension_img } from './url_icono_extensiones_archivos.js'
34
import { scroll_fin_chat } from './gestor_chats.js'
45
import { safeIdSelector } from './seguridad_ui.js';
@@ -503,7 +504,7 @@ export const crear_mensaje_html = async ({
503504
let controller_renderizado_activo = null;
504505

505506
// ─── CACHE USUARIOS CHAT ACTIVO (RAM) ───────────────────────────────────────
506-
const CACHE_USUARIOS_ACTIVO = new Map(); // id -> { data, timestamp }
507+
507508
let intervalo_reinicio_cache = null;
508509
const MAX_ACTIVE_CACHE_MB = 100; // Límite de la caché activa
509510

@@ -1217,7 +1218,7 @@ export async function mostrar_datos_chat_usaurios(e) {
12171218
})
12181219
}
12191220

1220-
const id_mio = await window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO()
1221+
const id_mio = ID_USUARIO_MONGO
12211222
const soyAdmin = info_chat?.admins?.includes(id_mio) || false
12221223

12231224
// Pre-obtener silenciados y bloqueados
@@ -1301,7 +1302,7 @@ export async function mostrar_datos_chat_usaurios(e) {
13011302
<div class="info-chat-lista-items">
13021303
<div class="info-chat-participante-item" data-id="${id_mio}">
13031304
<div class="info-chat-participante-info">
1304-
<span class="info-chat-participante-nombre">Tú <span class="apodo-usuario-lista-participantes">(${await window.cuenta_usuario.GET_APODO_SESION().catch(() => "")})</span></span>
1305+
<span class="info-chat-participante-nombre">Tú <span class="apodo-usuario-lista-participantes">(${APODO_USUARIO || ""})</span></span>
13051306
${info_chat.admins?.some(a => normalizeIdHelper(a) === id_mio?.toString()) ? `<span class="info-chat-participante-admin" style="color: gray; font-size: 11px;">Admin</span>` : ""}
13061307
</div>
13071308
</div>
@@ -1535,6 +1536,6 @@ async function Es_Contacto_Usuario(usuario_comprobar) {
15351536
}
15361537
//COMPROBAR SI ES EL USUARIO DE LA SESION
15371538
export async function Es_usuario_Sesion(usuario_comprobar) {
1538-
const id_mio = await window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO()
1539+
const id_mio = ID_USUARIO_MONGO
15391540
return usuario_comprobar === id_mio
15401541
}

frontend/home/ui/gestor_chats.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { limpiar_archivos_mensaje } from './manejador_archivos.js'
2+
import { ID_USUARIO_MONGO, batchRequestCache } from '../caches_datos.js'
23
import { escapeHTML, safeIdSelector } from './seguridad_ui.js';
34
import {
45
chat_componente_lista_estructura_html,
@@ -47,20 +48,7 @@ export function cerrar_paneles_al_abrir_chat() {
4748
// Variable global en el módulo para gestionar el bloqueo de carga de chats
4849
let id_chat_cargando = null;
4950

50-
// Caché de corta duración para peticiones repetitivas durante procesamiento por lotes
51-
const batchRequestCache = {
52-
data: new Map(),
5351

54-
async get(key, fetcher, ttl = 500) {
55-
const now = Date.now();
56-
const entry = this.data.get(key);
57-
58-
if (!entry || entry.expiry < now) {
59-
this.data.set(key, { value: await fetcher(), expiry: now + ttl });
60-
}
61-
return this.data.get(key).value;
62-
}
63-
};
6452

6553
export async function Get_datos_chat_abrir(id_chat) {
6654
const resultados = await Promise.allSettled([
@@ -209,7 +197,7 @@ export async function abrir_chat_item(id_chat, force = false) {
209197

210198
const [datos_chat, id_usuario] = await Promise.all([
211199
Get_datos_chat_abrir(id_chat),
212-
window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO()
200+
ID_USUARIO_MONGO
213201
])
214202

215203
clearTimeout(timer_spin)
@@ -360,7 +348,7 @@ async function _preparar_datos_mensaje({ emisor, chat, mensaje = "", archivos =
360348

361349
const [nombres_contactos, id_propio] = await Promise.all([
362350
batchRequestCache.get('contactos', () => window.social_usuario.OBTENER_CONTACTOS_USUARIO(), 30000),
363-
batchRequestCache.get('id_propio', () => window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO(), Infinity)
351+
batchRequestCache.get('id_propio', () => ID_USUARIO_MONGO, Infinity)
364352
]);
365353

366354
const propio = id_propio && id_emisor == id_propio.toString();

frontend/home/ui/historial_archivos_descargados.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Encontrar_Nombre_Chat_Usuario, Crear_chat_html } from './chat.js'
2+
import { ID_USUARIO_MONGO } from '../caches_datos.js'
23
import { url_icono_extension_img } from './url_icono_extensiones_archivos.js'
34
import { escapeHTML } from './seguridad_ui.js';
45

@@ -160,7 +161,7 @@ async function crear_eventos() {
160161
hacer_scroll_a_archivo(id_archivo)
161162
} else {
162163
const [id_usuario, lista_chats] = await Promise.all([
163-
window.cuenta_usuario.OBTENER_ID_MONGODB_USUARIO(),
164+
ID_USUARIO_MONGO,
164165
window.cuenta_usuario.getListaChats()
165166
])
166167

frontend/home/ui/manejador_archivos.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
import { url_icono_extension_img } from './url_icono_extensiones_archivos.js'
22
import { escapeHTML } from './seguridad_ui.js';
3+
import { cache_archivos_adjuntos, establecer_cache_archivos_adjuntos } from '../caches_datos.js';
34

45

5-
export let archivos_mensaje = []
6-
76
export function limpiar_archivos_mensaje() {
8-
archivos_mensaje = []
7+
establecer_cache_archivos_adjuntos([]);
98
}
109

1110
export function obtener_archivos_mensaje() {
12-
return [...archivos_mensaje]
11+
return [...cache_archivos_adjuntos];
1312
}
1413

1514
export async function render_html_lista_archivos() {
1615
const html = []
1716
//crear una cache que ayude a renderizar mas rapido
1817
const cache_propia_url_iconos = {}
1918
let guardados = 0
20-
for (let i = 0; i < archivos_mensaje.length; i++) {
21-
const activo = archivos_mensaje[i]
19+
for (let i = 0; i < cache_archivos_adjuntos.length; i++) {
20+
const activo = cache_archivos_adjuntos[i]
2221
let [url, idn] = [cache_propia_url_iconos[activo.extension] || null, true]
2322
if (!url) {
2423
[url, idn] = await url_icono_extension_img(activo.extension)
@@ -114,15 +113,15 @@ export async function añadir_archivos_dialogo() {
114113
let parts = fn.split('.'), ext = parts.length > 1 ? parts.pop() : "txt", no = parts.join('.')
115114
if (!(await window.validadores.VALIDAR_NOMBRE_ARCHIVO(no))) no = "Archivo"
116115
if (!(await window.validadores.VALIDAR_NOMBRE_ARCHIVO(ext))) ext = "txt"
117-
archivos_mensaje.push({ nombre: no, extension: ext, ruta: activo })
116+
cache_archivos_adjuntos.push({ nombre: no, extension: ext, ruta: activo })
118117
}
119118
actualizar_html_lista_archivos()
120119
}
121120

122121
export function mostrar_menu_contextual_archivo(e, clkNode) {
123122
document.querySelector(".context-menu")?.remove()
124123
const indice = clkNode.dataset.indice
125-
const archivo = archivos_mensaje[indice]
124+
const archivo = cache_archivos_adjuntos[indice]
126125
if (!archivo) return;
127126

128127
const mx = `
@@ -141,7 +140,7 @@ export function mostrar_menu_contextual_archivo(e, clkNode) {
141140
menu.addEventListener("click", (ev) => {
142141
const acc = ev.target.dataset.action
143142
if (acc === "borrar") {
144-
archivos_mensaje.splice(indice, 1)
143+
cache_archivos_adjuntos.splice(indice, 1)
145144
actualizar_html_lista_archivos()
146145
} else if (acc === "editar") {
147146
// Edición inline simplificada

0 commit comments

Comments
 (0)