Optimización de Ubiquity
Ubiquity es rápido, pero puede serlo aún más optimizando algunos elementos.
Nota
El servidor de pruebas integrado (accesible mediante Ubiquity serve) utiliza sus propios archivos de configuración y lanzamiento (en la carpeta .ubiquity de su proyecto).
Por lo tanto, no debe utilizarse para evaluar los resultados de los cambios realizados.
Pruebe sus páginas utilizando una configuración de software y hardware similar a la utilizada en producción.
Utiliza una herramienta de benchmark para evaluar tus cambios a medida que se producen (Apache bench por ejemplo).
Cache
Sistema
Elija y pruebe entre los diferentes sistemas de caché (ArrayCache, PhpFastCache, MemCached).
El sistema de caché se define en el archivo de configuración:
"cache" => [
"directory" => "cache/",
"system" => "Ubiquity\\cache\\system\\ArrayCache",
"params" => []
]
por defecto ArrayCache es a menudo la solución más optimizada.
Generación
Genera el router y la caché ORM (Piensa que las anotaciones nunca se usan en tiempo de ejecución):
Ubiquity init-cache
Contenidos estáticos
Si su aplicación tiene páginas que están siendo generadas por PHP pero que en realidad raramente cambian, puede almacenarlas en caché:
Los resultados de la consulta (utilizando métodos DAO)
La respuesta de ruta (con la anotación @route)
archivo índice
Elimine la línea que define el informe de errores en tiempo de ejecución y asegúrese de que la visualización de errores está desactivada en php.ini.
error_reporting(\E_ALL);//To be removed
Optimización de la configuración
Se puede acceder a la configuración desde el archivo app/config/config.php
.
Conserve sólo los elementos esenciales para su solicitud.
key |
role |
Optimización |
---|---|---|
siteUrl |
Utilizado por los métodos Ajax y por las funciones |
Debe suprimirse si no se utilizan estas funciones |
base de datos |
Utilizado por Ubiquity ORM |
Debe eliminarse si no se utiliza el ORM |
sessionName |
Si se asigna, inicia o recupera la sesión php para cada petición |
Se eliminará si la sesión es inútil |
templateEngine |
Si se asigna, instanciará un nuevo objeto Motor para cada solicitud. |
Se eliminará si no se utilizan las vistas |
templateEngineOptions |
Opciones asignadas a la instancia del motor de plantillas |
establecer la opción de caché en |
test |
Eliminar (obsoleto) |
|
debug |
Activa o desactiva los registros |
Fijar en |
logger |
Define la instancia del logger |
Para eliminar en producción |
di |
Define los servicios que deben inyectarse |
Sólo se lee la clave |
cache |
Define la ruta de la caché y la clase base de la caché, utilizada por modelos, enrutador, inyección de dependencia |
|
mvcNS |
Define las rutas o espacios de nombres utilizados por los controladores Rest, los modelos y los controladores |
|
isRest |
Define la condición para detectar si una ruta corresponde a un controlador Rest |
Se eliminará si no utiliza explícitamente esta condición en su código |
Ejemplo de configuración sin sesión, y sin inyección de dependencia:
1<?php
2return array(
3 "templateEngine"=>'Ubiquity\\views\\engine\\Twig',
4 "templateEngineOptions"=>array("cache"=>true),
5 "debug"=>false,
6 "cache"=>["directory"=>"cache/","system"=>"Ubiquity\\cache\\system\\ArrayCache","params"=>[]],
7 "mvcNS"=>["models"=>"models","controllers"=>"controllers","rest"=>""]
8);
Optimización de los servicios
Los servicios cargados son accesibles desde el archivo app/config/services.php
.
En cuanto al archivo de configuración, conserve sólo los elementos esenciales para su aplicación.
Líneas |
Rol |
---|---|
\Ubiquity\cache\CacheManager::startProd($config) |
Inicia la caché para ORM, base de datos, enrutador, inyección de dependencia |
UbiquityormDAO::start() |
Sólo para bases de datos múltiples |
Router::start() |
Sólo debe utilizarse si las rutas se definen con anotaciones |
Router::addRoute(«_default», «controllers\IndexController») |
Define la ruta por defecto (a eliminar en producción) |
\Ubiquity\assets\AssetsManager::start($config) |
Asigna la variable siteUrl al ThemeManager, que sólo se utilizará si se usan las funciones |
Ejemplo de un fichero de Servicios con una base de datos y arranque del router :
1<?php
2\Ubiquity\cache\CacheManager::startProd($config);
3\Ubiquity\controllers\Router::start();
Optimización del cargador automático
En producción, elimine las dependencias utilizadas únicamente en desarrollo y genere el archivo de mapa de clases optimizado:
composer install --no-dev --classmap-authoritative
Si las dependencias utilizadas ya se han eliminado y sólo desea actualizar el archivo de mapa (después de añadir o eliminar una clase):
composer dump-autoload -o --classmap-authoritative
Nota
El parámetro --no-dev
elimina la dependencia ubiquity-dev
requerida por webtools. Si utiliza webtools en producción, añada la dependencia phpmv/ubiquity-dev
:
composer require phpmv/ubiquity-dev
Optimización PHP
Tenga en cuenta que otras aplicaciones pueden utilizar los valores modificados en el mismo servidor.
OP-Cache
OPcache mejora el rendimiento de PHP almacenando el código de bytes de los scripts precompilados en memoria compartida, eliminando así la necesidad de que PHP cargue y analice los scripts en cada petición.
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
; The OPcache shared memory storage size.
opcache.memory_consumption=256
; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=10000
; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=0
; Allow file existence override (file_exists, etc.) performance feature.
opcache.enable_file_override=1
; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
opcache.huge_code_pages=1
Si utiliza el servidor web ubiquity-swoole:
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
Para completar
Recuerda que el framework utilizado no lo hace todo. También tienes que optimizar tu propio código.