Autor Tema: [opiniones?]¿Qué es más rápido? Include o fopen& fgets?  (Leído 497 veces)

Desconectado ceiboart

  • PHPerit@
  • *
  • Mensajes: 20
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« en: 04 de Marzo de 2013, 01:55:10 am »
Hola
Estoy tratando de quitarme esta duda que me surgió al plantearme un simple sistema de plantillas
No es que no me gusten los que ya andan por allí, sino porque simplemente me daba curiosidad el tema y quiero aprender. En fin…
Por la web encontré varios tutoriales de programadores experimentados  (y no copipasteros XD) en los que suelen proponer la apertura de un fichero y reemplazar ciertas ocurrencias de dicho fichero por los valores almacenados previamente. Algo así :
Abrir fichero
Leer  fichero y guardar en una variable
Reemplazar ocurrencia X por el valor de $X
Imprimir en pantalla
Otra forma que proponen es hacer un include que ya contenga nombres de variables que el programador definirá antes del include. Algo así
<?php
$X = ‘hello word’;
Include  ‘template.php’;
?>
//y el archivo template.php…
<html…
<body>
<?= $X ?>
</body>
</html>
La duda que me surge es cuál de los 2 métodos tendrá un mayor rendimiento
Tomando en cuenta que en el primero (si bien es más transparente para el diseñador) cargamos un archivo en memoria, reemplazamos valores del mismo por valores de variables (que a su vez son una carga más en memoria) e imprimimos los resultados
En cambio en el segundo (que es menos transparente) debemos simplemente definir las variables a usarse e incluir el archivo
A simple vista me parecía más sencillo, pero pensándolo mejor, el fichero a incluir deberá ser interpretado como un script (además de ser cargado en memoria)
Una ventaja de esto es que si contamos con un optimizador (como APC) los tiempos de procesamiento serían menores si ya se cuenta con un cache del template.php, pero no siempre se cuenta con algo como APC en el server :(
Bueno. No sé si se entendió. Yo quería saber sus opiniones XD

Comunidad PHPeros

[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« en: 04 de Marzo de 2013, 01:55:10 am »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« Respuesta #1 en: 04 de Marzo de 2013, 20:14:04 pm »
No sé que opción tiene mayor rendimiento respecto al tiempo que tarda, o la memoria que consume, pero creo que no es importante.

Es muy complicado que llegues al punto en el que tu sistema sea tan grande, tan crítico, y tenga tantas peticiones que ahorrarte unos milisegundos o unos bytes de memoria suponga una diferencia a tener en cuenta en la implementación del sistema.

Lo que yo sí que tendría en cuenta es lo que estás haciendo en cada uno de los casos.

En el primer caso (fopen) estás abriendo un archivo y procesandolo para usarlo como plantilla.
En el segundo caso (include) estás incluyendo un archivo externo, QUE TÚ SUPONES QUE ES UNA PLANTILLA, para usarlo como plantilla.
¿Que pasa si ese archivo no es una plantilla y tiene un script malicioso? ¿Que pasa si el diseñador que diseña la plantilla decide colarte un script PHP malicioso?

Hacer un include es jugartela. Es una solución "chapucera" (como diría yo) para implementar un sistema de plantillas.
La solución de archivos de plantillas procesados es más elegante, segura y eficiente, con la desventaja de que requiere más código para procesar el archivo de plantilla, y más trabajo si quieres añadir funcionalidad a las plantillas en algún momento.

Un saludo
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado LuisOrozco

  • PHPer@
  • **
  • Mensajes: 58
  • Karma: 6
  • Sexo: Masculino
  • Incipiente Software Developmenet Manager
    • Ver Perfil
Re:[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« Respuesta #2 en: 04 de Marzo de 2013, 20:53:59 pm »
Hola ceiboart.

En mi opinió es mejor usar file_get_contents; que sería quivalente a fgets solo que mas simple de usar.

La razón es que al manejar el contenido de los archivos como texto plano, puede manipularlo antes de imprimirlo además de que puede incluir varios "bloques" en el mismo archivo, ahorrándote un poco el lio de tantos archivos. Por ejemplo, para un listado general de items en forma de tabla, necesitas la cabecera de la tabla (primer bloque), la parte de la tabla donde se reemplazarán los valores por ejemplo %Nombre% %Apellido% (Segundo bloque), el fin de la tabla (Tercer bloque), quizás información adicional (Cuarto bloque). Quedando todo concatenado en un solo archivo llamado "Listado.html".

Otra razón son los diseñadores; si tu no vas a dar soporte para las plantillas pueden mover algo de PHP y causar un error y hacer un lio. Pudiendo ser también inseguro, ya que si es un diseñador "pica código" puede tomarse la libertad de poner algun script inseguro o mal hecho, causando alguna vulerabildiad.

Podría afectarte si tu aplicación esta basada en el paradigma MVC.

Y el último punto es la "elegancia", en lo personal no me agrada ver distintos lenguajes mezclados en un mismo archivo. En este caso tendrías un archivo HTML sucio de PHP. no sé, se ve raro.

En cuanto al rendimiento sería mas velóz usar include o require; pero vamos amigo, son milésimas de segundo; no creo que hagas mas de 30 llamadas a archivos de plantillas en toda la ejecución del script, honestamente no creo que deba preocuparte.


Saludos.
Un día se me ocurrió nacer... y lo hice.

Desconectado ceiboart

  • PHPerit@
  • *
  • Mensajes: 20
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« Respuesta #3 en: 11 de Marzo de 2013, 23:22:54 pm »
Gracias a ambos por sus respuestas  :star:  :star:  :star:  :star:  :star:
Era un tema que me tenía en duda
Por cierto, lo del rendimiento solo es preocupación por el desempeño en esos pobres servidores baratos de recursos compartidos XD
Hasta luego

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[opiniones?]¿Qué es más rápido? Include o fopen& fgets?
« Respuesta #4 en: 12 de Marzo de 2013, 20:08:43 pm »
Gracias a ambos por sus respuestas  :star:  :star:  :star:  :star:  :star:
Era un tema que me tenía en duda
Por cierto, lo del rendimiento solo es preocupación por el desempeño en esos pobres servidores baratos de recursos compartidos XD
Hasta luego


Aún así dudo mucho que notes la diferencia :P

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es