Foros del Web » Programando para Internet » PHP »

include, require u otro?

Estas en el tema de include, require u otro? en el foro de PHP en Foros del Web. Hola amig@s. He estado leyendo algunas respuestas que dais a otr@s forer@s y creo que ninguna se adapta a lo que yo quiero saber realmente. ...
  #1 (permalink)  
Antiguo 20/04/2012, 14:48
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
include, require u otro?

Hola amig@s.
He estado leyendo algunas respuestas que dais a otr@s forer@s y creo que ninguna se adapta a lo que yo quiero saber realmente.

Vereis, mi problema radica en que estoy programando una aplicación muy pesada, un programa de gestión en formato web. Pesada en el aspecto de que existen 3 tipos de usuarios y cada grupo realiza unas tareas distintas. Total que con todo el código generado la página tarda demasiado en cargar y la estoy modulando todo lo posible.
En principio cargo un index que muestra lo que es la estructura de la página y el módulo de logueo, todo en html. Cuando el usuario se identifica, dependiendo de su nivel de acceso llamo a una página de funciones u otra. Eso lo hago con un include_once y no hay ningún problema, en ningún momento va a entrar más código del que debe.
Luego ocurre que a cada usuario se le carga su menú(todo va por xajax, asíncronamente) y que cada opción del menú abarca muchísimas funciones, por lo tanto mucho código.
Lo que temo es que al moverme por los menús e incluir el código de cada menú la aplicación se vaya haciendo cada vez más lenta.
Realmente lo que no sé es si sólo se incluye el código mientras me estoy moviendo por ese menú o el código queda inclustado aunque cambie de menú. Creo que debe ser la segunda opción, por eso acudo a vosotros, ahora que estoy revisando de nuevo la aplicación me gustaría hacerla lo más ligera posible.

Gracias por vuestra atención.
  #2 (permalink)  
Antiguo 20/04/2012, 14:53
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: include, require u otro?

la unica diferencia entre el include y el require (segun el titulo de tu post) es que el require hace que lo que incluyas sea de caracter necesario, es decir que si no lo encuentra o falla te corta la ejecucion del programa, caso contrario, el include, incluye el codigo pero sin ser de caracter obligatorio por lo que te arrojaria un warning en caso de fallar.

si el menu se carga a travez de ajax no va a hacer que el php se vuelva a cargar por lo que solo se ejecutaria la primera vez, ya que solo estarias refrescando una parte de la pagina no toda, a menos que el include lo hagas en la parte del php que maneja el ajax, ahi si se incluiria en cada llamada del ajax.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 20/04/2012, 15:03
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: include, require u otro?

Antes de nada, decir que lo siguiente lo digo con la boca pequeña. Me gustaria que alguien lo corroborara o desmintiera.

En cada petición que haces al servidor, via http o ajax, este hace borrón y cuenta nueva, excepto las $_SESSIONS.
Lo que te debe preocupar en cuanto a lentitud, no és el servidor php, sinó el javascript del navegador que vayas añadiendo con cada ajax. Si repites funciones, veras, (con chrome -inspeccionar elemento -), que los javascrips se van acumulando y se ejecutan las veces que esten repetidos.

Espero haberte sido útil. Saludos
  #4 (permalink)  
Antiguo 20/04/2012, 15:06
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

Hola linuxzero.
Las llamadas a los primeros includes las hago desde una función a la que llamo mediante xajax. Después las demás serán igual.
Luego, no entiendo si lo que me dices se adapta a mi pregunta o no lo he entendido bien. No es el menú lo que me preocupa, eso se va a cargar sólo una vez. Es, por ejemplo, si el menú tiene 3 opciones:
opcion a
opcion b
opcion c

Yo pulso sobre la opción a e incluyo la página de la opción a. Cuando pulse la opción b se incluirá el código de la página de opción b. Entonces habré incluido los 2 códigos? O cuando cargue la opción b debo primero volver a cargar el menú para que desaparezca el código de la opción a?

Gracias por tu respuesta.
  #5 (permalink)  
Antiguo 20/04/2012, 15:09
Avatar de unreal4u  
Fecha de Ingreso: octubre-2008
Mensajes: 72
Antigüedad: 15 años, 6 meses
Puntos: 10
Respuesta: include, require u otro?

por qué no haces un profiling? De esa manera, podrás saber con certeza qué es lo que está provocando la lentitud.

Por experiencia sé que la diferencia de tiempo entre require, require_once, include e include_once es casi despreciable en un proyecto grande, pasan a formar parte de las micro-optimizaciones que puedes hacer, lo más importante es hacer el profiling y de esa forma podrás saber dónde están los reales cuellos de botella.

Saludos.
  #6 (permalink)  
Antiguo 20/04/2012, 15:12
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: include, require u otro?

Y, eso va a depender de como lo hayas programado, la forma mas sencilla de corroborarlo es haciendo un simple echo en cada php que vayas a incluir para saber si lo llama o no, pero te reitero, no esta mal pensarlo asi, pero habria que ver como lo programaste, porque si lo programaste mal puede que lo incluya pero que no muestre nada por ende no verias que se esta cargando, como seria el caso de que el php que incluis fuera de solo libreria.

igual es raro que levantes el menu por ajax, yo lo haria directamente en php, no usaria ajax
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #7 (permalink)  
Antiguo 20/04/2012, 15:12
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

Gracias oscartt67.
No había leído tu respuesta antes, la colgaste mientras estaba escribiendo.
Dices entonces que el problema puede deberse a la página de funciones .js que incluyo al inicio de la aplicación.
Entonces ahora mi pregunta es la siguiente: podría cargar distintas páginas .js dependiendo del usuario logueado? desde la función xajax? cómo?

Gracias de nuevo!!
  #8 (permalink)  
Antiguo 20/04/2012, 15:17
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: include, require u otro?

Pues la verdad, si alguin responde esa pregunta, me hará feliz.

Uso mucho ajax, siempre con jquery, y lo que hago es guardar en una sesion los nombres de las funciones que voy incluyendo para que no se repitan. Lo hago así con la sensación de ser una gran chapuza...

salud!
  #9 (permalink)  
Antiguo 20/04/2012, 15:21
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: include, require u otro?

duiscupad. aclaración:
mi problema no es el mismo que el tuyo, ya que yo incluyo javascrip no por usuario, sino por la necesidad del momento, con lo que se me repetian funciones en el navegador si dos llamadas ajax requerian la misma funcion.

mi problema és: como evitar incrustar una funcion javascript que ya ha sido declarada?
  #10 (permalink)  
Antiguo 20/04/2012, 15:22
Avatar de unreal4u  
Fecha de Ingreso: octubre-2008
Mensajes: 72
Antigüedad: 15 años, 6 meses
Puntos: 10
Respuesta: include, require u otro?

inicia un thread nuevo para no desvirtuar este ;)
  #11 (permalink)  
Antiguo 20/04/2012, 15:25
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

Veamos, por si no lo habeis cogido lo explico mejor.
Esto es lo que pasa cuando se loguea el usuario
Código HTML:
Ver original
  1. <input type='button' name='bslogin' id='bslogin' value='Entrar' class='botonlogin' title='Entrar' onclick=' xajax_dameLogin(document.fLog.logusuario.value, document.fLog.logpss.value);'/>

Llamo a dameLogin por xajax y esta función hace el resto.
Código PHP:
Ver original
  1. function dameLogin($usu, $pass)
  2. {
  3.     $respuesta = new xajaxResponse();
  4.    
  5.     $conexion = conectar();
  6.     $pss = base64_encode($pass);
  7.     $consulta = "Select username, id_nivel from usu_plataforma where username = '$usu' and password = '$pss'l";
  8.    
  9.     $resultado = mysql_query($consulta, $conexion);
  10.     if(mysql_num_rows($resultado) > 0)
  11.     {
  12.         $response = comienzaIdentificado($usu);
  13.         $respuesta->loadCommands($response);
  14.     }
  15.     mysql_close($conexion);
  16.     return $respuesta;
  17. }

La siguiente función podría haberse incluido en la anterior, pero no sé porqué me ha dado por separarlas hasta saber qué es lo que voy a hacer.

Código PHP:
function comienzaIdentificado($user)
{
    
$respuesta = new xajaxResponse();
    
$conexion conectar();
    
$usuario $_SESSION['usuario'];
    
$consulta "Select id_nivel, nombre from usu_plataforma where username = '$user'";
    
$resultado mysql_query($consulta$conexion) or die("Error de conexi&oacute;n a la base de datos");
    
$fila mysql_fetch_row($resultado);
    
$nivel $fila[0];
    
$nombre $fila[1];
    
$salida .= "<div id='nombreusu'><span>Bienvenido $nombre</span></div>";
    
$respuesta->assign("login_cabecera""innerHTML"$salida);
    
    if(
$nivel == 1)
    {
        
        include_once(
"funciones_nivel1.php");
        
$response comienzaNivel1($user);
        
$respuesta->loadCommands($response);
    }
    else if(
$nivel == 2)
    {
        
$objResponse = new xajaxResponse();
        return  
$objResponse->alert(print_r("soy usuario nivel 2"true));
    }
    else if(
$nivel == 3)
    {
        
$objResponse = new xajaxResponse();
        return  
$objResponse->alert(print_r("soy iusuario nivel 3"true));
    }
    
    
    return 
$respuesta;
    
mysql_close($conexion);

Se nota que ahora mismo trabajo sólo con los usuarios de nivel 1?
La siguiente función reza:
Código PHP:
function comienzaNivel1($usu)
{
    
$respuesta = new xajaxResponse();
    
    
$reponse cargaMenu();
    
$response2 cargaContenido();
     
$respuesta->loadCommands($response);
$respuesta->loadCommands($response2);


    
    return 
$respuesta;

También puedo decir que el menú lo cargo con xajax porque tendré que refrescarlo cada x tiempo por la recepción de mensajes(el numerito que indica los mensajes que hay sin leer).
  #12 (permalink)  
Antiguo 20/04/2012, 15:26
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: include, require u otro?

Es que és posible que el problema de aniMAYtiona sea justamente ese. Sin embargo, pido disculpas de nuevo.
  #13 (permalink)  
Antiguo 20/04/2012, 15:27
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

Otra cosa, unreal4u, qué es eso del profiling?
Gracias!
  #14 (permalink)  
Antiguo 20/04/2012, 15:29
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: include, require u otro?

Cita:
la unica diferencia entre el include y el require (segun el titulo de tu post) es que el require hace que lo que incluyas sea de caracter necesario, es decir que si no lo encuentra o falla te corta la ejecucion del programa, caso contrario, el include, incluye el codigo pero sin ser de caracter obligatorio por lo que te arrojaria un warning en caso de fallar.
Hay otra diferencia más, y es que include mira urls absolutas y relativas, mientras que require solo son relativas.
Por ende, require consume menos y a mi parecer, es la más aconsejable. Por supuesto, poco influirá en un proyecto.
No se trata de micro optimización, sino de buenas prácticas de programación. Si se programa correctamente, cosas como include_once son totalmente innecesarias.


Un saludo
__________________
Web Designer.
Themes-Up!, próximamente
  #15 (permalink)  
Antiguo 20/04/2012, 15:36
Avatar de unreal4u  
Fecha de Ingreso: octubre-2008
Mensajes: 72
Antigüedad: 15 años, 6 meses
Puntos: 10
Respuesta: include, require u otro?

es un recorrido interno paso por paso por tu aplicación midiendo el tiempo que llevó cada cosa, desde un echo hasta una consulta, y te informando del tiempo en que consta cada paso. Necesitas xDebug instalado y configurado para entregarte los profiles y los mismos los puedes leer con kcachegrind (tb hay una versión para windows) o si tienes mac, encuentro mejor MacCallGrind, es bastante más simple en su manera de mostrarte los tiempos. También hay una versión en PHP, pero entre nos... pta que es malo!

Saludos.
  #16 (permalink)  
Antiguo 20/04/2012, 15:38
Avatar de unreal4u  
Fecha de Ingreso: octubre-2008
Mensajes: 72
Antigüedad: 15 años, 6 meses
Puntos: 10
Respuesta: include, require u otro?

Cita:
Iniciado por fishdesign Ver Mensaje
Hay otra diferencia más, y es que include mira urls absolutas y relativas, mientras que require solo son relativas.
Por ende, require consume menos y a mi parecer, es la más aconsejable. Por supuesto, poco influirá en un proyecto.
No se trata de micro optimización, sino de buenas prácticas de programación. Si se programa correctamente, cosas como include_once son totalmente innecesarias.


Un saludo
Totalmente de acuerdo ;)

Saludos.
  #17 (permalink)  
Antiguo 20/04/2012, 15:48
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

unreal4u, me temo que no tengo tiempo para hacer eso.
En este finde tiene que estar optimizado todo. Trabajo en 2 aplicaciones más y no quiero quedarme más findes en casa trabajando.
Como os decía la aplicación ya fue terminada lo mismo, con prisas, sin tiempo de optimizar. Ahora que la he vuelto a coger, un par de años después y con más conocimiento, necesito mejorarla, ya por reto personal.

Entonces, uso require? Según he leído por ahí, el código del require se va a revisar aunque no sea cierta la condición. Eso no relentizaría?
  #18 (permalink)  
Antiguo 21/04/2012, 08:25
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: include, require u otro?

Al final he pasado lo que llevo de aplicación optimizada por gmetrix y me ha lanzado unas cuantas mejoras que iré aplicando. Más que nada imágenes.

Etiquetas: html, include, require, usuarios
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 07:08.