fix: optimizar caché de traducción con hashes SHA256 y normalización de texto para estabilidad en producción
This commit is contained in:
@@ -11,10 +11,14 @@ from pydantic import BaseModel
|
||||
|
||||
from passlib.hash import pbkdf2_sha256 as hasher
|
||||
from botdiscord.config import load_config, get_web_config, get_libretranslate_url, get_db_type
|
||||
load_config() # Cargamos configuración inmediatamente
|
||||
|
||||
from botdiscord.database import (
|
||||
get_ui_translation, save_ui_translation,
|
||||
get_admins, get_admin_by_username, add_admin, delete_admin
|
||||
init_db, get_ui_translation, save_ui_translation,
|
||||
get_admins, get_admin_by_username, add_admin, delete_admin,
|
||||
_normalize_text
|
||||
)
|
||||
init_db() # Aseguramos que las tablas existan antes de que FastAPI atienda peticiones
|
||||
from botdiscord.translate import translate_text
|
||||
|
||||
app = FastAPI(title="Panel de Configuración - Bots de Traducción")
|
||||
@@ -23,23 +27,36 @@ SCRIPT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
templates = Jinja2Templates(directory=os.path.join(SCRIPT_DIR, "panel", "templates"))
|
||||
|
||||
# Caché de memoria para traducciones UI (evita 50 queries SQL por página)
|
||||
_ui_memory_cache = {}
|
||||
|
||||
# Filtro de traducción para Jinja2
|
||||
def translate_filter(text, lang="es"):
|
||||
if lang == "es" or not text:
|
||||
return text
|
||||
|
||||
# Buscamos en caché de la base de datos (acceso rápido)
|
||||
from botdiscord.database import get_ui_translation, save_ui_translation
|
||||
# NORMALIZACIÓN inmediata
|
||||
text = _normalize_text(text)
|
||||
if not text: return ""
|
||||
|
||||
# 1. Buscamos en caché de MEMORIA (RAM) - Ultra rápido
|
||||
cache_key = f"{lang}:{text}"
|
||||
if cache_key in _ui_memory_cache:
|
||||
return _ui_memory_cache[cache_key]
|
||||
|
||||
# 2. Buscamos en caché de la base de datos (acceso rápido)
|
||||
cached = get_ui_translation(text, lang)
|
||||
if cached:
|
||||
_ui_memory_cache[cache_key] = cached
|
||||
return cached
|
||||
|
||||
# Si no está en caché, traducimos de forma síncrona para la UI
|
||||
# 3. Si no está en ningún caché, traducimos de forma síncrona
|
||||
from botdiscord.translate import translate_text_sync
|
||||
translated = translate_text_sync(text, lang)
|
||||
|
||||
if translated and translated != text:
|
||||
save_ui_translation(text, lang, translated)
|
||||
_ui_memory_cache[cache_key] = translated
|
||||
|
||||
return translated
|
||||
|
||||
|
||||
Reference in New Issue
Block a user