Foros del Web » Programando para Internet » PHP »

Todas las funciones en un fichero o en varios?

Estas en el tema de Todas las funciones en un fichero o en varios? en el foro de PHP en Foros del Web. Creo que esta es una duda que le puede salir a cualquiera que esté desarrollando en cualquier lenguaje, pero a mi me está surjiendo en ...
  #1 (permalink)  
Antiguo 23/08/2011, 22:37
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 10 años, 5 meses
Puntos: 5
Todas las funciones en un fichero o en varios?

Creo que esta es una duda que le puede salir a cualquiera que esté desarrollando en cualquier lenguaje, pero a mi me está surjiendo en PHP.

Resulta que tengo un fichero con todas las funciones generales que necesito para mi CMS, el fichero tiene unos 200 KB de tamaño. La duda me surge por que el fichero de funciones lo incluyo con require en todas las paginas de mi site, pero claro, alomejor solo utilizo 4 o 5 funciones, dependiendo la pagina.

La duda es la siguiente: ¿Que es mas optimo? Abrir un fichero de 200 KB o 4 o 5 ficheros de menos de 1 kb tal vez? Me refiero a que, en el proceso de hacer un require de 200 kb seria mas rapido, y mas optimo en terminos de consumo de CPU que hacer 5 requires (haciendo el proceso de abrir un fichero 5 veces)?

Si me baso en la teoria de un sprite css, la logica parece que dice que el primero será mucho mejor... :S

Tb he visto otros cms como joomla, wordpress o cosas asi que parece que tb las separan, por usabilidad para el programador, pero tal vez tb por este problema que tengo.

La idea que se me habia ocurrido utilizando el metodo de dividir las funciones en ficheros era hacer una funcion que al pasarle un array con nombres de funciones haga requires de esas funciones... Algo sencillo que poner al principio de cada script.

Pero claro, la duda existencial aqui es ¿que es mas optimo? :P

Muchas gracias!
  #2 (permalink)  
Antiguo 23/08/2011, 22:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Todas las funciones en un fichero o en varios?

Pensar que mientras menos código mejor es un error garrafal, así mismo pensar que incluir todo de un golpe es mejor. No compares CSS Sprites con PHP, no tienen nada que ver en lo absoluto.

Existe un patrón de programación que nos invita a separar todo para manejarlo mas fácil, recuerda que los que escribimos y leemos código somos los humanos.

Pensar a favor de las maquinas nos desvía del objetivo humano que es compartir y mantener código, ¿consideras que es óptimo tener todo en un solo script?

Recuerda el viejo dicho de "divide y vencerás".
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/08/2011, 23:08
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 10 años, 5 meses
Puntos: 5
Respuesta: Todas las funciones en un fichero o en varios?

jajaja, muchas gracias por la respuesta pero a ver, creo que confundes la cuestion. Si quieres compartir codigo para eso hay otras formas.. por ejemplo un snipet puedes conpartirlo en un foro como este, el blog oficial del cms, la documentacon oficial,... mil sitios antes que el codigo final en si, o incluso en una version del script para desarrolladores donde todo queda mas claro si lo estas haciendo open source.

El script lo va a ejecutar un humano? no? pues para que dejar la version final para humanos si la maquina no lo va a procesar tan optimamente en cuanto a CPU se refiere? Vamos no creo que haya mucho debate ahi xD.

Que pudiera coincidir en este caso que es mejor tanto para CPU como para humanos? pues perfecto, pero no hay que pensar para humanos en un paso de optimizacion de rendimiento del que hablo, al igual que un JS minificado se minifica no para dejarlo ilegible para humanos si no por rendimiento de ancho de banda basicamente.

No se como mezclastes tal concepto de compartir codigo con optimizar CPU si no preguntaba eso.

En fin, aclarado eso. Los patrones son consejos, que seguramente por lo que hablas del mensaje te refieres a algun patron relacionado a una buena estructura de codigo para luego ser facilmente comprensible por otros programadores. Pero no quiere decir que eso sea necesariamente lo optimo para el server.




Aun me queda la duda de que es mejor.

Gracias.
  #4 (permalink)  
Antiguo 23/08/2011, 23:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Todas las funciones en un fichero o en varios?

Claro que entiendo todo lo que quieres hacer, pues piensas que apretando código PHP lo va a ejecutar mas rápido, pero no es así. El compilador de PHP siempre hace su trabajo netamente bien, y por muy compacto que dejes tu código (o en un solo archivo) no va a correr mas rápido.

Eso es lo que te trato de decir, no más.

Yo no mezclé nada, tampoco soy tan tonto.

Ponerse a pensar en casos extremos como el tuyo verdaderamente desvía la verdad de las cosas.

Por eso es malo pre optimizar creyendo y mezclando teorías.

Nada hace mas rápido un programa que la buena arquitectura, el buen diseño del software, componentes, etc.

Ahorrar bytes de texto no hace mejor el software, ¿preparar una versión para desarrolladores?

Te invito a descubrir Github, eres el primero que escucho "clavarse" con algo tan trivial, de veras.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/08/2011, 01:11
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 10 años, 5 meses
Puntos: 5
Respuesta: Todas las funciones en un fichero o en varios?

Es que yo pienso en el caso como cuando en mi ordenador intento abrir un fichero de texto: Un fichero de varios KB me tarda muy poco, pero a medida que aumenta tarda mas... Está claro que 200 Kb va a ser milesimas de segundos, pero no me preocupa cuando se abre una vez, sino cuando se abriese 200 veces al mismo tiempo, solamente con 200 usuarios concurrentes pasaria... Logicamente para que se abra concurrentemente 200 veces tiene que darse una casualidad muuuy grande, o tener varios millones de usuarios al mismo tiempo, y dado ese caso, seguramente que el proyecto falla por algun otro lado antes que esas milesimas...

Pero como bien dices, es algo trivial, dudas que me surgen cuando programo, que como estas tengo muchisimas, y es cuando me pregunto: ¿Pero que es mejor para el servidor? Por que siendo una cosa una milmillonesima parte mejor que la otra, si me va a costar lo mismo programarlo de una forma que de otra, pues lo hago de la que salga mejor :P. Aunque claro está que luego será mas comodo para los programadores una que otra.

Aunque bueno... en este caso en concreto quedaria igual de legible casi, tabulando bien, un caso que otro. De hecho puede que hasta todo junto a un programador le valla mejor para tener todo a golpe de ctrl+f xD

No quiero apretar el codigo PHP, solamente que mi fichero ocupa 200 kb y no se si es mejor tenerlo asi con todas las funciones en un sitio, que tenerlas separadas y añadir includes, que luego tb es un poco lio por que hay veces que no sabes si necesitaras en el futuro del script una funcion del fichero de funciones y no tienes que andar incluyendo requires :P.

Aun no soy tan pro como para github jajaj. Igual en unos años ;)

Saludos!
  #6 (permalink)  
Antiguo 24/08/2011, 05:57
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 11 años, 8 meses
Puntos: 253
Respuesta: Todas las funciones en un fichero o en varios?

La pregunta que planteas tiene tantas variantes y tantos detalle que creo que es imposible de preguntar a priori. Si de verdad quieres enterarte de esto (por curiosidad o por lo que sea) habría que realizar un pequeño estudio de rendimiento sobre ambas opciones, con cargas de diferentes usuarios y en varios escenarios, para ver qué solución resulta la mejor. Yo no sé cómo funciona el compilador de PHP, pero dudo mucho que evalúe una función si no se utiliza nunca, seguramente, recorrerá el código y cuando encuentre una función que no tiene ya compilada, la busque y la compile. En este caso, te daría igual cargar 2000 funciones que 20, si sólo usas 4.

De todas formas, la pregunta que tú quieres realizar, como te han indicado ya, es parcial. Un sistema o una aplicación no se pueden estudiar parcialmente. En informática pasa muchas veces que por mejorar en unas facetas pierdes en otras. Las características del software las sabemos todos de sobra: rendimiento, manejabilidad, velocidad, mantenibilidad, optimización de recursos y un largo etcétera. Y también todos sabemos que es imposible tenerlo todo al máximo, porque normalmente si mejoras uno, vas a empeorar otro.

En tu caso, está bien que intentes mejorar el rendimiento o la velocidad de carga, pero no en detrimento de otras características, como la mantenibilidad. Realmente, un fichero de funciones con tantas funciones se te puede llegar a hacer inmantenible. Utiliza clases de PHP, utiliza herencia, separa por funcionalidad las funciones (valga la redundancia) y, si te conviene separar los ficheros para una mayor mantenibilidad, hazlo, el detrimento en rendimiento no va a ser nada comparado con la ganancia en mantenibilidad.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: fichero, funciones, todas
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 16:30.