The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Kumbia Enterprise Framework utiliza inyección de dependencias para instanciar cualquier componete a medida que se va requiriendo. Esto resulta ideal ya que evita que decenas de archivos sean cargados en una petición sin que sean requeridos encontrado la media perfecta de requerimientos de dependencias para cada proceso de negocio.
Algunos componentes como Router, Dispatcher, Core, etc., no requieren de inyección ya que debido a la arquitectura del framework son requeridos siempre en cada petición y de está forma se mejora el rendimiento de una aplicación. Otros componentes son requeridos usualmente pero dependiendo de los objetivos de la aplicación se puede decir que son utilizados 'frecuentemente'.
El desarrollador puede contar cuantos archivos son leidos en una determinada petición de esta forma:
<?php echo print_r(get_required_files()); ?>
Si el número de archivos es muy elevado, la aplicación podría estar consumiendo recursos de lectura de disco altos haciendo que el rendimiento de una aplicación se disminuya.
El componente Compiler resuelve estas situación generando un solo archivo con todos los componentes y archivos del framework en una versión 'optimizada' que son utilizados en una petición regular y dejándole el resto del trabajo al inyector de dependencias. El uso de este componente puede aumentar el rendimiento del framework de 4 a 5 veces. Si se cuenta ó no se cuenta con un optimizador y cacheador de código intermedio este componente siempre puede ser de gran ayuda para el mejoramiento del rendimiento de una aplicación.
Por ser una solución basada 100% en PHP puede tener un papel vital cuando no se cuenta con control del hardware donde se implementa la aplicación.
Nota: Compiler solo debe ser usado cuando la aplicación haya cumplido en gran medida con las fases de desarrollo y testeo ya que algunos componentes de la aplicación son incluidos en la compilación con lo cuál no se podría realizar cambios a estos.
Teoria de optimización avanzada
En este apartado se trata de explicar las teorias que en LouderTechnology se han investigado para tratar de búscar una ejecución más optima de aplicaciones en PHP. Las investigaciones se basan en benchmarks a diferentes tipos de procesos.
Optimización de ciclos
Optimización por reemplazo de funciones
Si para un conjunto X' de instrucciones repetitivas se evalua n veces una misma función f(x) -> y', en donde x es un valor estático para este contexto entonces podría decirse que hay una degradación del rendimiento ya que el valor y' es evaluado al menos n veces.
La función entonces puede ser traducida a f(x) -> z' reemplazando z' -> y' en el conjunto X'.
Optimización por evaluación de terminos estáticos
Definición 1: Si para una evaluación de la expresión de compilación f : X -> Y, los valores de x resultan de operaciones polimorficas deducibles entonces se puede decir que f : z' -> Y producirá el mismo resultado en ejecución.
Definición 2: Si para una evaluación de la expresión de compilación f : X -> Y, los valores de x resultan de reemplazar constantes deducibles entonces se puede decir que f : z' -> Y producirá el mismo resultado en ejecución.
Comportamiento de Compiler
El componente genera un único archivo con todos los componentes y clases utilizados en una petición regular a una aplicación. Otros componentes pueden ser agregados a este archivo para hacer más efectivo el objetivo esperado.
Optimizaciones básicas de la compilación
El archivo generado es producido realizando las siguientes optmizaciones que pueden mejorar en medida menor ó media el rendimiento de una petición:
Todos los comentarios de linea sencilla y multi-linea son eliminados
Espacios, tabulaciones y saltos de línea son eliminados.
Archivos que sean incluidos en otros archivos ya incluidos son omitidos
Las constantes __FILE__ y __LINE__ mantienen su valor original
Optimizaciones avanzadas de la compilación
Con base al funcionamiento interno del compilador de PHP es posible determinar que prácticas de programación son más reconmendables para obtener mejoras en velocidad y rendimiento. Compiler ofrece una fase de compilación denominada avanzada en la que realiza las siguientes optimizaciones:
Todos los strings de doble comilla que no contengan sustituciones de variables ó caracteres de barra invertida son convertidos a strings de comilla sencilla, excepto los que son multi-línea, de esta forma se evita que el analizador léxico del interprete PHP búsque innecesariamente expresiones regulares que no van a ser encontradas.
Las sentencias 'for' son optimizadas cuando realizan conteos sucesivos en su evaluación. El código es modificado haciendo que el conteo se ejecute una sola vez:
Ejemplo: Optimización por eliminación de calculos redundantes
Cuando alguna de las variables de la evaluación es modificada entonces la sentencia 'for' se mantiene intacta:
<?php
$unaPalabra = "esto es un texto";
for($i=0;$i<=strlen($unaPalabra)-1;$i++){
if($i%2==0){
$unaPalabra.="x";
}
if($i>10){
break;
}
}
Las asignaciones que no se hagan con el operador de incremento ó decremento son convertidas a esta forma, por lo tanto $x = $x +1 se lleva a $x++ y $x = $x + $y se convierte en $x+=$y;
El desarrollador puede tener en cuenta las optimizaciones anteriores e implementarlas como buenas prácticas de desarrollo.
Generar una Compilación
Como se mencionó anteriormente el objetivo de la compilación es reunir todos aquellos componentes y recursos que constituyen una media de lectura de disco optimizandolos y así mejorar el rendimiento de la aplicación.
En el proceso seleccionado por el desarrollador se invoca el método compileFramework del componente Compiler:
<?php Compiler::compileFramework() ?>
Limitaciones de Compiler
El componente Compiler tiene las siguientes limitaciones: FALTA