Foros del Web » Soporte técnico » Ayuda General »

[SOLUCIONADO] Pagina web muy lenta

Estas en el tema de Pagina web muy lenta en el foro de Ayuda General en Foros del Web. Hola gente, espero esten bien!. Tengo un problema con mi web... Resulta que mi web cada dia crece un poco mas dado a que agrego ...
  #1 (permalink)  
Antiguo 13/10/2015, 23:40
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 8 años, 8 meses
Puntos: 12
Pagina web muy lenta

Hola gente, espero esten bien!.

Tengo un problema con mi web...

Resulta que mi web cada dia crece un poco mas dado a que agrego nuevos sistemas en javascript, php y mysql.

Bueno, comenzare diciendo que mi web cada vez que utilizaba un sistema cualquierea ya sea: mensajes rapidos, mensajes privados, y todo lo qyue pueda hacerse en php y mysql... bueno cuando mi web estaba asi funcionaba genial, es decir, obviamente cada vez que un sistema de esto se utilizaba la pagina se recargaba....

Bueno, tome la decision de utilizar todo ajax para que todo esto tome una forma dinamica, es decir que en mi web casi no hay nada que recargue la pagina, todo se hace atravez de AJAX, pero se preguntaran ¿Y que pasa?.

Bueno, resulta que desde que coloque ajax mi web se volvio super lenta, yo crei que ajax era para hacer la web mucho mas rapida y eficiente, pero por lo que veo la hace mas lenta que la ******.

Cuando mando un mensaje a mi mismo para probar que tal funciona tarda alrededor de 6 u 8 segundos para que aparezca el mensaje "Mensaje enviado correctamente.".

Tambien tego el sistema ese de que cuando quieres ir a otra pagina esta se carga en la "index", es decir utiliza la funcion LOAD de jquery, lo cual pense que tambien la haria mas eficiente, pero tarda lo mismo que mandar un mensaje casi 10 segundos en que cargue esa web.....

Alguien sabe porque pasa esto??
¿Como lo puedo solucionar o hacerla mas eficiente?

Por favor necesito ayudaaa!.
  #2 (permalink)  
Antiguo 14/10/2015, 00:17
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Pagina web muy lenta

Buenas TrinityCore,

El concepto de que Ajax es más rápido... bueno depende de como lo has montado.

Cada vez que se refresca el navegador se hace una solicitud de todos lo elementos no cacheados en el navegador del usuario y lógicamente de todas las tareas que tengas asignada al backend.

Ajax lo que permite es solo refrescar ciertas partes de la web, una zona donde aparecen consultas, select dependientes, nuevos registros, ventanas modales etc...

Al no tener que cargar de nuevo todos los elementos no cacheados en el navegador se "debe reducir" la velocidad de respuesta.

Quiere decir, que si tenemos bien configurado el cacheo en el navegador del usuario tenemos parte del trabajo solucionado. Ahora bien, ¿que pasa con el backend?

Ahí está la respuesta del problema, si haces una consulta sobre datos en la DB, por ejemplo para llenar un select con categorías, que es un sector bastante estático, esto se debería cachear y evitar peticiones recurrentes e innecesarias a la DB.

Los elementos más dinámicos, igual, se cachean pero quizás con un ttl algo más reducido.

Un caso de ejemplo, tienes 50 usuarios haciendo peticiones por segundo.

Cada petición es una consulta a la base de datos, 50 peticiones cada segundo... uhm... incluso si hay cambios, cachear con un ttl de un segundo o de dos segundos, es casi imperceptible para cualquier persona (es lo que tardan muchas webs en cargar) y la respuesta de la base de datos sería una consulta cada 1s o 2s para 50 usuarios... (valores teóricos ) eso es algo más aceptable y más ágil para conseguir una mejor respuesta del servidor.

El ttl de cada elemento en cache es algo que tienes que evaluar para buscar un equilibrio entre eficiencia de la aplicación y experiencia del usuario.

Después tendrías la propia configuración del servidor, me consta que influye, pero ese tema se me escapa.

Hay temas interesantes en el foro sobre aumentar la velocidad de descarga de una web. Y el tema ajax, tiene más que ver con el desarrollo de la aplicación.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 14/10/2015, 04:55
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 8 años, 8 meses
Puntos: 12
Respuesta: Pagina web muy lenta

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Buenas TrinityCore
Hola Duck !

Agradezco tu respuesta, la verdad puede que yo sea un poco desastrozo a la hora de hacer consultas y quien sabe las cosas que habre hecho mal en la web..

Mi web tiene muchos archivos desparramados y desordeados, asi que decidi ordenar todo en carpetas, cada una es un sector diferente y en cada cual existe 3 carpetas que son "images", "js" y "css".

Es decir, quiero evitarme problemas y ser mas ordenado, me pondre a pensar una hora si es necesario para saber como nombrar a un archivo correctamente para evitar confuciones y preguntare en este foro las dudas antes de hacer Ca****.

Tengo dos cosas para preguntarte y espero no te moleste responderlas, es que aveces suelo ser pesado y la gente se molesta.

1- ¿Esta bien lo que digo?, ¿te parece apropiado que ordene toda la web en carpetas (sectores) y cada cual con su correspondientes archivos css, images y js?

2- Esta pregunta aunque te parezca rara o sin sentido biene al caso porque tengo una duda muy grande y creo que es hora de sacarmela..
Suponte que yo tengo estos dos codigos que veras a continuacion

Código PHP:
/**consulta a la base de datos prueba
<?php
require('config.php');
     
mysqli_select_db($conexion,$db_prueba)or die(mysqli_error($conexion));
     
$consulta mysqli_query($conexion,"SELECT * FROM usuarios")or die(mysqli_error($conexion));
     
$resultado mysqli_num_rows($consulta);
     while(
$linea mysqli_fetch_array($consulta,MYSQL_ASSOC)){
         echo 
$linea['id'];
         echo 
$linea['usuario'];
         echo 
$linea['correo'];
}
mysqli_close($conexion);
?>

/**Este codigo consulta la base de datos prueba2
<?php
require('config.php');
     
mysqli_select_db($conexion,$db_prueba2)or die(mysqli_error($conexion));
     
$consulta mysqli_query($conexion,"SELECT * FROM mensajes")or die(mysqli_error($conexion));
     
$resultado mysqli_num_rows($consulta);
     while(
$linea mysqli_fetch_array($consulta,MYSQL_ASSOC)){
         echo 
$linea['id'];
         echo 
$linea['usuario'];
         echo 
$linea['correo'];
}
mysqli_close($conexion);
?>
Aqui mi duda es: si yo tengo estos dos archivos anclados o directamente escritos en una misma pagina, supongamos "index.php", ¿habria un problema de variables?
¿O el mysqli_close($conexion); evita este problema?

Es que yo me hago lios porque siempre me la paso haciendo consultas asi:
Código PHP:
$consulta_mensajes blah blah...
$resultado_consulta_mensajes blah blah...
$consulta_usuarios blah blah...
$resultado_consulta_usuarios blah blah... 
y llega un punto que ya no se que inventar... y se me confunde todo...

Espero puedas orientarme un poco y gracias por contestar!!.
  #4 (permalink)  
Antiguo 14/10/2015, 05:59
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Pagina web muy lenta

Cita:
Iniciado por TrinityCore Ver Mensaje
1- ¿Esta bien lo que digo?, ¿te parece apropiado que ordene toda la web en carpetas (sectores) y cada cual con su correspondientes archivos css, images y js?
Esta respuesta es muy personal, he visto quien lo mete todo en un solo directorio y se mueve como pez en el agua, y otros que crean un directorio para cada documento. Si trabajas solo, como te sea más cómodo y fácil encontrar las cosas. Si prevés que en el futuro vas a compartir desarrollo... sería interesante pensar en algún orden mas o menos lógico para cualquier ser humano.

Yo acostumbro a separar lo común (que se utiliza en todas las vistas), de los módulos (todo aquello que tenga solo relación directa con alguna parte concreta de las vistas) evitando siempre que pueda la duplicidad.

Ejemplo:
El style.css es general y se utiliza por toda la web. va en la parte común, /css.
El auth.css es totalmente distinto y solo lo utiliza la parte de la web que se encarga de loguear y demás... va en un directorio a parte, /css/auth.

Cita:
Iniciado por TrinityCore Ver Mensaje
2- [B]Esta pregunta aunque te parezca rara o sin sentido biene al caso porque tengo una duda muy grande y creo que es hora de sacarmela..
[...]
Aqui mi duda es: si yo tengo estos dos archivos anclados o directamente escritos en una misma pagina, supongamos "index.php", ¿habria un problema de variables?
¿O el mysqli_close($conexion); evita este problema?
Parecido a lo anterior, ¿vas a duplicar el código?, y cuando toque modificar algo, ¿voy a buscar entre todos los archivo a ver donde he ido duplicando?

Reutilización...

PHP Te facilita las funciones o clases para eso.

Lo puedes tener en un documento independiente y reutilizarlo tantas veces como quieras.

Si necesitas modificar algo, o bien modificas una consulta concreta (solo una modificación) o bien modificas la función para los resultados (solo una modificación).

Puedes alterar el resultado y añadir componentes, por ejemplo la función prinResults podría estar obteniendo los datos directamente desde la base de datos. Cambiando la función desde donde le llegan los datos, e intercalando la función de cache, solucionas el tema consultas/cache sin modificar todos aquellos archivos que dependían de esta función.

Sobre el código que has escrito y evitar ese problema de repetir una posible solución sería así:
Código PHP:
<?php
require('config.php');
// Estas variables vienen de config.php
$conexion 'datos de conexion';
$db       'nombre de la db';

$keyCache1 'usuarios';
$query1    "SELECT * FROM usuarios";
$consulta1 printResults($keyCache1$query1$conexion$db);

$keyCache2 'mensajes';
$query2    "SELECT * FROM mensajes";
$consulta2 printResults($keyCache2$query2$conexion$db);

///////////////////////////////////////////    FUNCIONES DE TRABAJO    ////////////////////////////////////////////////////

/**
 * Imprime los resultados, vengan de cache o de la db
 *
 * @param null $keyCache
 * @param null $query
 * @param null $conexion
 * @param null $db
 */
function printResults($keyCache null$query null$conexion null$db null)
{
    
//$results = getQuery($query, $conexion, $db);
    
$results getCacheQuery($keyCache$query$conexion$db);

    foreach(
$results['fetch_array'] as $linea)
    {
        echo 
$linea['id'];
        echo 
$linea['usuario'];
        echo 
$linea['correo'];
    }
    echo 
'Total ' $results['num_rows'];
}

/**
 * Comprueba si la consulta ya está en cache, si no, la realiza y guarda la cache para la próxima.
 *
 * @param null $keyCache
 * @param null $query
 * @param null $conexion
 * @param null $db
 *
 * @return array
 */
function getCacheQuery($keyCache null$query null$conexion null$db null)
{
    
// pseudo código
    
if($cache->hash($keyCache))
    {
        return 
$cache->getItem($keyCache);
    }
    
$results getQuery($query$conexion$db);
    
$cache->setItem($keyCache$results);

    return 
$results;
}

/**
 * Realiza una consulta contra la DB
 *
 * @param null $query
 * @param null $conexion
 * @param null $db
 *
 * @return array
 */
function getQuery($query null$conexion null$db null)
{
    
mysqli_select_db($conexion$db) or die(mysqli_error($conexion));

    
$consulta mysqli_query($conexion$query) or die(mysqli_error($conexion));
    
$resultado mysqli_num_rows($consulta);
    
$linea     mysqli_fetch_array($consultaMYSQL_ASSOC);

    
mysqli_close($conexion);

    return array(
        
'num_rows'    => $resultado,
        
'fetch_array' => $linea,
    );
}
Solo es orientativo, lo he hecho de cabeza así que no se si funciona, pero más o menos puede darte ideas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 14/10/2015, 06:59
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 8 años, 8 meses
Puntos: 12
Respuesta: Pagina web muy lenta

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Esta respuesta es muy personal
Gracias de nuevo por tu comentario ya que me ha ayudado muchisimo.
Ahora solo me queda rediseñar y reprogramar la web con tranquilidad asi lleve semanas!.

Muchas gracias!

Etiquetas: lenta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:37.