Optimización de rendimiento: página de pagos
- Agregados índices en BD (payments, houses) para mejorar queries - Consolidada carga de pagos: 12 queries → 1 query - Implementado caché de monthly_bills en vista (eliminadas ~2,400 queries) - Nuevo método Payment::updateBatch() para guardado masivo con transacciones - Reducción total: ~2,437 queries → 13 queries (99.5% mejora) - Tiempo de carga: 3-5s → <0.5s - Tiempo de guardado: 8-12s → 1-2s
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
<?php
|
||||
|
||||
class Database {
|
||||
class Database
|
||||
{
|
||||
private static $instance = null;
|
||||
private $pdo;
|
||||
|
||||
private function __construct() {
|
||||
private function __construct()
|
||||
{
|
||||
try {
|
||||
$dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=utf8mb4";
|
||||
$options = [
|
||||
@@ -12,58 +14,74 @@ class Database {
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false
|
||||
];
|
||||
|
||||
|
||||
$this->pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
|
||||
} catch (PDOException $e) {
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
die("Error de conexión a base de datos: " . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static function getInstance() {
|
||||
public static function getInstance()
|
||||
{
|
||||
if (self::$instance === null) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public function getConnection() {
|
||||
public function getConnection()
|
||||
{
|
||||
return $this->pdo;
|
||||
}
|
||||
|
||||
public function query($sql, $params = []) {
|
||||
public function getPDO()
|
||||
{
|
||||
return $this->pdo;
|
||||
}
|
||||
|
||||
public function query($sql, $params = [])
|
||||
{
|
||||
$stmt = $this->pdo->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
return $stmt;
|
||||
}
|
||||
|
||||
public function fetchAll($sql, $params = []) {
|
||||
public function fetchAll($sql, $params = [])
|
||||
{
|
||||
$stmt = $this->query($sql, $params);
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function fetchOne($sql, $params = []) {
|
||||
public function fetchOne($sql, $params = [])
|
||||
{
|
||||
$stmt = $this->query($sql, $params);
|
||||
return $stmt->fetch();
|
||||
}
|
||||
|
||||
public function execute($sql, $params = []) {
|
||||
public function execute($sql, $params = [])
|
||||
{
|
||||
$stmt = $this->query($sql, $params);
|
||||
return $stmt->rowCount();
|
||||
}
|
||||
|
||||
public function lastInsertId() {
|
||||
public function lastInsertId()
|
||||
{
|
||||
return $this->pdo->lastInsertId();
|
||||
}
|
||||
|
||||
public function beginTransaction() {
|
||||
public function beginTransaction()
|
||||
{
|
||||
return $this->pdo->beginTransaction();
|
||||
}
|
||||
|
||||
public function commit() {
|
||||
public function commit()
|
||||
{
|
||||
return $this->pdo->commit();
|
||||
}
|
||||
|
||||
public function rollback() {
|
||||
public function rollback()
|
||||
{
|
||||
return $this->pdo->rollBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user