2009-12-28 57 views
7

Estoy creando un archivo PHP que hace 2 llamadas a la base de datos mysql y el resto del script es si las declaraciones para cosas como file_exists y otras variables simples. Tengo alrededor de 2000 líneas de código en este archivo hasta el momento.¿Cuántas líneas de código PHP son demasiadas para un archivo?

¿Es mejor práctica incluir un archivo separado si una declaración es verdadera? ¿o simplemente escribe el código directamente en la declaración if?

¿Hay un número máximo de líneas de código para un solo archivo que se debe cumplir con PHP?

Respuesta

6

Yo diría que no debería haber ningún problema de rendimiento relacionado con la cantidad de líneas en sus archivos php, puede ser tan grande como lo necesite.

Ahora, para los patrones y las mejores prácticas, diría que tiene que juzgar por usted mismo, vi muchos archivos bien organizados de varios miles de líneas y muchos archivos realmente pequeños y difíciles de leer. Mi consejo sería:

  • Juzgue la legibilidad del código fuente, organícelo siempre bien.
  • Es importante tener una separación lógica hasta cierto punto, si su archivo hace ambas cosas: acceso pesado a la base de datos, escritura, modificación, renderizado html, ajax, etc. Puede separar cosas o usar un enfoque orientado a objetos.
  • Siempre busque el equilibrio entre la separación lógica y el código. No debe ser complicado ni extra ordenado con una gran cantidad de archivos de 10 líneas
+3

Los archivos PHP se procesan como un todo. Los archivos grandes, incluso si contienen un código no llamado, tendrán un impacto significativo en el rendimiento. Sin embargo, 2000 líneas no tienen el mismo orden de magnitud que "grandes". –

+1

Un caché de código de operación como APC puede encargarse de ese problema. –

1

¿Necesita enfocarse en el número de líneas? No, no necesariamente Solo asegúrese de que su código esté organizado, sea eficiente y no innecesariamente detallado.

2

2000 líneas de código en un solo archivo no es exactamente malo desde el punto de vista de una computadora pero en la mayoría de las situaciones es probablemente evitable, eche un vistazo a MVC design pattern, le ayudará a organizar mejor su código.

Además, tenga en cuenta que incluir (muchos) archivos ralentizará la ejecución de su código.

+1

Un bytecode cache como APC se encargaría del último problema. –

0

Realmente no importa, siempre y cuando haya documentado su código correctamente, modularizado tanto como sea posible, y verificado por cualquier ineficiencia. Es posible que tenga un archivo de 10.000 líneas. Aunque normalmente me divido en alrededor de 500-1000 para cada sección de una aplicación.

0

Es posible que desee leer un libro como Clean Code by Bob Martin. Aquí hay algunas pepitas de ese libro:

  • Una clase debe tener una responsabilidad
  • Una función debe hacer una cosa y hacen bien

Con PHP, si usted no está utilizando el Enfoque de clase; Te vas a encontrar con problemas de duplicación. Hazte un favor y lee un poco sobre el tema; le ahorrará mucho más tiempo en extensión y mantenimiento.

2

El recuento de líneas no es un buen indicador del rendimiento. Asegúrese de que su código esté organizado de manera eficiente, dividido en clases lógicas o bloques y que no combine código no relacionado en módulos individuales. Uno de los problemas con un lenguaje como PHP es que, salvo el almacenamiento en caché creativo, cada línea de cada archivo incluido debe ser tokenizada, comprimida en un árbol de análisis y convertida en instrucciones significativas cada vez que se solicita la página de alojamiento. Las plataformas compiladas como .NET y Java no sufren este problema.

Además, dado que uno de los otros críticos mencionados MVC como una forma de mantener los archivos corta: buena organización del código es una función de la experiencia y el sentido común y no es de ninguna manera atado a ningún patrón o arquitectura particular. MVC es interesante, pero no es una solución a este problema.

+0

Un caché de código de operación como APC, no es necesario ser especialmente creativo, se encargará del problema de la compilación. – ceejayoz

+0

Cierto, pero hasta donde yo sé, APC aún no realiza los muchos pasos de optimización de los compiladores nativos. No es exactamente manzanas con manzanas. –

+0

Además,.NET vs PHP (con y sin APC) benchmarks: http://www.brandonsavage.net/of-lies-damned-lies-and-benchmarks-redux/ –

1

2k líneas me suenan demasiado ... Aunque depende de qué estilo de código sigas, p. Ej. muchos saltos de línea, muchas funciones pequeñas o buenos comentarios de contrato de API pueden aumentar el tamaño aunque sean una buena práctica. También un buen formato de código puede aumentar las líneas.

En cuanto a PHP sería bueno saber: ¿Es 2k líneas con una sola clase o solo una gran inclusión con código PHP no-OOP? ¿Se combina con sentencias de plantilla y lógica de programa (como a menudo encuentro en código PHP)?

Normalmente no cuento estas líneas cuando se divide. Simplemente entraron en hábitos. Si el código se vuelve confuso, reacciono y refactorizo. Aún después de haber estudiado algo de código que como equipo escribió recientemente, puedo ver algunos patrones: la función/método

  • extracto de si el tamaño es más grande que 20LOC (sin comentarios) y el uso de if/cláusulas else
  • extracto a otra clase si el tamaño> 200-300LOC
  • extracto a otro paquete/carpeta si los artefactos> 10

Todavía depende de lo que el tipo de código que tengo. Por ejemplo, si se trata de cargas de lógica (if/else/switch/for), el LOC por función disminuye. Si apenas hay lógica involucrada (simples declaraciones de código unidireccional) los límites aumentan. Al final, la regla más importante es: ¿un humano entendería el código? ¿Podrá él leerlo bien?

0

No conozco ninguna manera útil de dividir el código así de simple, sobre todo si todo pertenece semánticamente.

Probablemente sea más interesante pensar si puede eliminar parte del código refactorizando. Por ejemplo, si a menudo usa una combinación particular de cheques con variables ligeramente diferentes, podría ser útil externalizar la combinación de cheques en una función y llamarla cuando corresponda.
Recuerdo ver un proyecto una vez que estaba bien escrito en su mayor parte, pero tenía un problema de ese tipo. Por ejemplo, el código para analizar el archivo de configuración se duplicó como esto:

if (file_exists("configfile")) { 
    /* tons of code here */ 
} else if (file_exists("/etc/configfile")) { 
    /* almost the same code again */ 
} 

Eso es un ejemplo extremo, pero se entiende la idea.

Cuestiones relacionadas